当前位置: 首页 > 知识库问答 >
问题:

基于Groupby Max将多行透视到列中

沈华晖
2023-03-14

我对Python和熊猫相当陌生,有一个问题我不太确定如何解决。我有一个熊猫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队。如果一名球员没有为多个队打过球或少于三个队打过球,我希望在给定的列中填写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个答案

水麒
2023-03-14

您可以排序,然后旋转:

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]
 类似资料:
  • 我有一张这样的桌子 基于以上数据,我需要得到这样一个表 我不知道如何使用一些PIVOT来实现这一点

  • 我已经用id、app和客户输入了下面的dataframe 输入数据规则 预期产出 使用pivot和groggrege-make app值作为列名,并将聚合的客户名作为数据表中的列表 val newDF=df.groupby(“id”).pivot(“app”).agg(expr(“coalesce(first(customer),0)”)).drop(“app”).show() 问题:在我的查询中

  • 我正在尝试将列中的值透视到列标题,但保留其余数据。这是我的完整代码,以及我能得到的最接近我正在寻找的内容。唯一的问题是我无法弄清楚如何保留列: 原始数据帧: 我最近的支点尝试: 电流输出: 期望输出: 这个和这个我都试过了,没有成功。 任何帮助都将不胜感激。

  • 我在 spark 中有一个数据帧: 此处,所有列均为字符串数据类型。 如何在多列中使用分解功能,并创建如下所示的新数据框: 在新的数据帧中,所有列都是字符串数据类型。

  • 假设我有三个不同的MySQL表: 表: 表: 表: 我想要得到一个表,合作伙伴在行和产品作为列。到目前为止,我能够得到如下输出: 使用此查询: 但我更想要这样的东西: 问题是,我无法告诉我将拥有多少个产品,因此需要根据products表中的行动态更改列号。 这个很好的答案似乎并不适用于MySQL:T-SQL Pivot?从行值创建表列的可能性

  • 问题内容: 可以说我有三个不同的MySQL表: 表: 表: 表: 我想得到一个表格,其中行和产品列为合作伙伴。到目前为止,我已经能够获得如下输出: 使用此查询: 但我想改成这样: 问题是我无法知道我将拥有多少个产品,因此列号需要根据产品表中的行动态更改。 这个很好的答案似乎不适用于mysql:T-SQL Pivot吗?根据行值创建表格列的可能性 问题答案: 不幸的是,MySQL没有您基本上想做的功