【发布时间】:2016-01-17 23:51:28
【问题描述】:
最好举例说明:
我想通过col1 和col2 聚合一个DataFrame,对col3 和col4 的结果求和,并在col5 上平均结果
如果我只想总结 col3-5,我会使用 df.groupby(['col1','col2']).sum()
【问题讨论】:
-
有样本数据和预期结果会很好吗?
最好举例说明:
我想通过col1 和col2 聚合一个DataFrame,对col3 和col4 的结果求和,并在col5 上平均结果
如果我只想总结 col3-5,我会使用 df.groupby(['col1','col2']).sum()
【问题讨论】:
您可以为此使用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'}。