很抱歉与标题有任何可能的混淆。我将使用以下代码和图片更好地描述我的问题。现在我有一个包含多列的数据框。前两列,它们被排序,'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
添加回答
举报
0/150
提交
取消