按一列分组并在熊猫中找到另一列的总和和最大值

新手上路,请多包涵

我有一个这样的数据框:

 Name  id  col1  col2  col3  cl4
PL    252  0     747   3     53
PL2   252  1     24    2     35
PL3   252  4     75    24    13
AD    889  53    24    0     95
AD2   889  23    2     0     13
AD3   889  0     24    3     6
BG    024  12    89    53    66
BG1   024  43    16    13    0
BG2   024  5     32    101   4

现在我需要按 ID 分组,对于列 col1 和 col4 找到每个 id 的总和并将其放入父列附近的新列中(例如:col3(sum))但是对于 col2 和 col3 找到最大值。期望的输出:

 Name  id  col1 col1(sum) col2 col2(max) col3 col(max) col4 col4(sum)
PL    252  0       5      747    747     3     24    6    18
PL2   252  1       5      24     747     2     24    12   18
PL3   252  4       5      75     747     24    24    0    18
AD    889  53      76     24     24      95    95    23   33
AD2   889  23      76     2      24      13    95    5    33
AD3   889  0       76     24     24      6     95    5    33
BG    024  12      60     89     89      66    66    0    67
BG1   024  43      60     16     89      0     66    63   67
BG2   024  5       60     32     89      4     66    4    67

计算这个的最简单和最快的方法是什么?

原文由 jovicbg 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

您可以使用 groupby/transform 来创建所需的列

df[['col1_sum', 'col4_sum']]=df.groupby('id')['col1', 'cl4'].transform('sum')
df[['col2_max', 'col3_max']]=df.groupby('id')['col1', 'cl4'].transform('max')

    Name    id  col1    col2    col3    cl4 col1_sum    col4_sum    col2_max    col3_max
0   PL      252 0       747     3       53  5           101         4   53
1   PL2     252 1       24      2       35  5           101         4   53
2   PL3     252 4       75      24      13  5           101         4   53
3   AD      889 53      24      0       95  76          114         53  95
4   AD2     889 23      2       0       13  76          114         53  95
5   AD3     889 0       24      3       6   76          114         53  95
6   BG      24  12      89      53      66  60          70          43  66
7   BG1     24  43      16      13      0   60          70          43  66
8   BG2     24  5       32      101     4   60          70          43  66

原文由 Vaishali 发布,翻译遵循 CC BY-SA 3.0 许可协议

执行此操作的最(熊猫)本机方法是使用 .agg() 方法,该方法允许您指定要为每列应用的聚合函数(就像您在 SQL 中所做的那样)。

文档中的示例:

 df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})

原文由 Maresh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题