开发者社区> 问答> 正文

基于Groupby Max将多个panda行旋转为列

我刚接触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

展开
收起
kun坤 2019-12-27 17:17:17 569 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]
    
    2019-12-27 17:17:24
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载