我对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,但是我不确定这是否会达到预期的结果。任何帮助将不胜感激!
答案 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]