我刚接触Python和panda,有一个问题我不太确定如何解决。我有一个panda 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的数据会因为玩家团队B的游戏次数最多的,其次是团队和团队c,如果一个玩家没有在多个团队或少于三个,我想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,但我不确定这是否会达到预期的结果。任何帮助将不胜感激! 问题来源StackOverflow 地址:/questions/59382173/pivot-multiple-pandas-rows-into-columns-based-on-groupby-max
你可以排序,然后旋转:
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]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。