【问题标题】:groupby in pandas with different functions for different columns熊猫中的groupby对不同的列具有不同的功能
【发布时间】:2016-01-17 23:51:28
【问题描述】:

最好举例说明:

我想通过col1col2 聚合一个DataFrame,对col3col4 的结果求和,并在col5 上平均结果

如果我只想总结 col3-5,我会使用 df.groupby(['col1','col2']).sum()

【问题讨论】:

  • 有样本数据和预期结果会很好吗?

标签: python pandas


【解决方案1】:

您可以为此使用Groupby.agg()(或Groupby.aggregate())方法。

aggregate() 函数可以接受字典作为参数,在这种情况下,它将键视为列名,将值视为用于聚合的函数。如the documentation -中所述

通过将 dict 传递给聚合,您可以对 DataFrame 的列应用不同的聚合。

例子-

import numpy as np
result = df.groupby(['col1','col2']).agg({'col3':'sum','col4':'sum','col5':np.average})

演示 -

In [50]: df = pd.DataFrame([[1,2,3,4,5],[1,2,6,7,8],[2,3,4,5,6]],columns=list('ABCDE'))

In [51]: df
Out[51]:
   A  B  C  D  E
0  1  2  3  4  5
1  1  2  6  7  8
2  2  3  4  5  6

In [52]: df.groupby(['A','B']).aggregate({'C':np.sum,'D':np.sum,'E':np.average})
Out[52]:
     C    E   D
A B
1 2  9  6.5  11
2 3  4  6.0   5

【讨论】:

  • 谢谢,是否所有未提及的列都有默认类型?
  • 很抱歉没有收到您的问题。
  • 假设我想对两个特定列求和,然后对所有其余列求平均,而不具体命名它们
  • 我不认为你可以这样做,但你可以使用字典理解来创建字典,例如 - {k:np.sum if k in {'col3','col4'} else k:np.average for k in df.columns if k not in {'col1','col2'}
  • 太棒了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 2018-08-20
  • 2018-12-29
  • 2020-11-25
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多