根据Groupby Max将多个熊猫行旋转为列

时间:2019-12-17 21:15:08

标签: python pandas dataframe group-by pivot

我对Python和Pandas还是很陌生,但有一个我不太确定如何解决的问题。我有一个熊猫DataFrame,其中包含曲棍球运动员,他们在同一年曾为多个球队效力:

Player         Season      Team      GP        G      A       TP      
Player A        2020        A        10        8      3       11
Player A        2020        B        25        10     5       15
Player A        2020        C        6         4      7       11
Player B        2020        A        30        20     6       26
Player B        2020        B        25        18     5       23

我希望能够合并包含同一年的同一位球员的行,并按该球员参加比赛最多的球队来排列列。在上面的示例中,B组的所有数字都是第一个,因为玩家A为B组玩了最多的游戏,其次是A组,然后是C组。如果一个玩家没有参加过多个团队或少于三个,我就是d是要在给定列中填写NA。

例如,上面的df会变成(Team1代表最高的团队):

Player        Season      Team1      GP1    G1      A1     TP1     Team2      GP2        G2      A2       TP2    Team3    GP3   G3   A3  TP3
Player A      2020          B        25     10      5      15       A         10         8       3        11       C       6     4   7    11
Player B      2020          A        30     20      6      26       B         25         18      5        23       NA     NA     NA  NA   NA

我想想解决这个问题的最初方法是使用一系列groupby max,但是我不确定这是否会达到预期的结果。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以排序,然后旋转:

a=(df.sort_values('GP')
   .assign(col=df.groupby(['Player','Season']).cumcount()+1)
   .pivot_table(index=['Player','Season'], columns='col', aggfunc='first')
)

# rename:
a.columns = [f'{x}{y}' for x,y in a.columns]