没有要连接的对象

2024-09-27 19:22:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下值的数据帧:

    df = 
route    stop_code      stop_name
900      92072          Eastbound @ 257 Kingston Road East   
900      1590           Kingston Westbound @ Wicks   
900      2218           Kingston Eastbound @ Wicks   
900      93152          Salem Northbound @ Kingston   
92       728            Kingston Rd. @ Salem Rd.   
224      92071          Salem Southbound @ Twilley   
215      92071          Salem Southbound @ Twilley   
215      92054          Northbound @ 133 Salem   
224      92054          Northbound @ 133 Salem   
215      93152          Salem Northbound @ Kingston   

我想要的是按站点代码或站点名称对路由进行分组,例如:

df2 = 
    route         stop_code      stop_name
    900           92072          Eastbound @ 257 Kingston Road East   
    900           1590           Kingston Westbound @ Wicks   
    900           2218           Kingston Eastbound @ Wicks   
    92            728            Kingston Rd. @ Salem Rd.   
    224, 215      92071          Salem Southbound @ Twilley   
    215, 215      92054          Northbound @ 133 Salem   
    215, 900      93152          Salem Northbound @ Kingston 

我试着做到以下几点:

df2 = df.groupby(['stop_code']).agg(set).reset_index()

虽然它在我的测试环境中运行良好,但当我在Django(Python Anywhere)中部署它时,我得到了以下错误(可能是由于Pandas/Python/Django的不同版本):

ValueError: No objects to concatenate

谁能指导我把它整理好吗?短暂性脑缺血发作


Tags: namedfcoderdroutestopeastroad
1条回答
网友
1楼 · 发布于 2024-09-27 19:22:52

你可以这样做

df.groupby(['stop_code','stop_name'],sort=False)['route'].agg(list).reset_index()

输出

  stop_code stop_name                           route
0   92072   Eastbound @ 257 Kingston Road East  [900]
1   1590    Kingston Westbound @ Wicks          [900]
2   2218    Kingston Eastbound @ Wicks          [900]
3   93152   Salem Northbound @ Kingston         [900, 215]
4   728     Kingston Rd. @ Salem Rd.            [92]
5   92071   Salem Southbound @ Twilley          [224, 215]
6   92054   Northbound @ 133 Salem              [215, 224]

如果您想要与预期输出完全相同,请执行以下操作。然而,这可能会更慢

df.groupby(['stop_code','stop_name'],sort=False)['route'].apply(lambda x: ','.join([str(a) for a in x])).reset_index()

输出

 stop_code  stop_name                            route
0   92072   Eastbound @ 257 Kingston Road East   900
1   1590    Kingston Westbound @ Wicks           900
2   2218    Kingston Eastbound @ Wicks           900
3   93152   Salem Northbound @ Kingston          900,215
4   728     Kingston Rd. @ Salem Rd.             92
5   92071   Salem Southbound @ Twilley           224,215
6   92054   Northbound @ 133 Salem               215,224

相关问题 更多 >

    热门问题