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

很抱歉与标题有任何可能的混淆。我将使用以下代码和图片更好地描述我的问题。


现在我有一个包含多列的数据框。前两列,它们被排序,'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.1

1   100 1   2014.0  6835    NaN NaN

2   100 1   2011.0  5959    352.0   5.9

3   100 2   2018.0  15828   NaN NaN

4   100 2   2015.0  13114   2964.0  22.6

5   100 2   2009.0  11844   1280.0  10.8

6   100 3   2016.0  15434   NaN NaN

7   100 3   2013.0  18699   2015.0  10.8

8   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_%3

0   100 1   2017    7016    635.0   9.1 2014    6835    NaN NaN 2011    5959    352.0   5.9

1   100 2   2018    15828   NaN NaN 2015    13114   2964.0  22.6    2009    11844   1280.0  10.8

2   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.0

1   100 1   2014    200 NaN

2   100 1   2011    300 2.0

3   100 2   2018    400 NaN

4   100 2   2015    500 3.0

5   100 2   2009    600 4.0

期望输出:


Route   ID  Year    Vol T_% Year.1  Vol.1   T_%.1   Year.2  Vol.2   T_%.2

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

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

所以基本上只需移动图片中显示的单元格

http://img.mukewang.com/61308df7000112c102690261.jpg

http://img4.mukewang.com/61308dfe00018bfe06190078.jpg

我被难住了。新生成的列的名称无关紧要。

对于这个当前的数据帧,我每个“组”有三行,如代码所示。如果答案可以容纳每组任意数量的行,那就太好了。

谢谢你的时间。


撒科打诨
浏览 1354回答 2
2回答

白板的微信

与groupby+ cumcount+ set_index+unstackdf1 = 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  Year20    100   1   1.0   100   2017   NaN   200   2014   2.0   300   20111    100   2   NaN   400   2018   3.0   500   2015   4.0   600   2009
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python