为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas Dataframe:将共享相同列值的多行移动/合并为一行

Pandas Dataframe:将共享相同列值的多行移动/合并为一行

撒科打诨 2021-09-02 16:39:55
很抱歉与标题有任何可能的混淆。我将使用以下代码和图片更好地描述我的问题。现在我有一个包含多列的数据框。前两列,它们被排序,'Route' 和 'ID'(抱歉格式化,这里的所有行的 'Route' 值为 '100' 和 'ID' 从 1 到 3。df1.head(9)  Route ID  Year    Vol Truck_Vol   Truck_%0   100 1   2017.0  7016    635.0   9.11   100 1   2014.0  6835    NaN NaN2   100 1   2011.0  5959    352.0   5.93   100 2   2018.0  15828   NaN NaN4   100 2   2015.0  13114   2964.0  22.65   100 2   2009.0  11844   1280.0  10.86   100 3   2016.0  15434   NaN NaN7   100 3   2013.0  18699   2015.0  10.88   100 3   2010.0  15903   NaN NaN我想要的是 Route  ID  Year    Vol1    Truck_Vol1  Truck_%1    Year2   Vol2    Truck_Vol2  Truck_%2    Year3   Vol3    Truck_Vol3  Truck_%30   100 1   2017    7016    635.0   9.1 2014    6835    NaN NaN 2011    5959    352.0   5.91   100 2   2018    15828   NaN NaN 2015    13114   2964.0  22.6    2009    11844   1280.0  10.82   100 3   2016    15434   NaN NaN 2013    18699   2015.0  10.8    2010    15903   NaN NaN再次,对于凌乱的格式感到抱歉。让我尝试一个简化版。输入:  Route ID  Year    Vol T_%0   100 1   2017    100 1.01   100 1   2014    200 NaN2   100 1   2011    300 2.03   100 2   2018    400 NaN4   100 2   2015    500 3.05   100 2   2009    600 4.0期望输出:Route   ID  Year    Vol T_% Year.1  Vol.1   T_%.1   Year.2  Vol.2   T_%.20   100 1   2017    100 1.0 2014    200     NaN     2011    300      21   100 2   2018    400 NaN 2015    500     3.0     2009    600      4所以基本上只需移动图片中显示的单元格我被难住了。新生成的列的名称无关紧要。对于这个当前的数据帧,我每个“组”有三行,如代码所示。如果答案可以容纳每组任意数量的行,那就太好了。谢谢你的时间。
查看完整描述

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

与groupby+ cumcount+ set_index+unstack


df1 = df.assign(cid = df.groupby(['Route', 'ID']).cumcount()).set_index(['Route', 'ID', 'cid']).unstack(-1).sort_index(1,1)

df1.columns = [f'{x}{y}' for x,y in df1.columns]

df1 = df1.reset_index()

输出df1:

   Route  ID  T_%0  Vol0  Year0  T_%1  Vol1  Year1  T_%2  Vol2  Year2

0    100   1   1.0   100   2017   NaN   200   2014   2.0   300   2011

1    100   2   NaN   400   2018   3.0   500   2015   4.0   600   2009


查看完整回答
反对 回复 2021-09-02
  • 2 回答
  • 0 关注
  • 1310 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信