在Python中,要按组获取摘要,请使用groupby().agg(fx())
;例如groupby('variable').agg('sum')
。那和直接使用功能有什么区别,例如; groupby('variable').sum()
吗?
答案 0 :(得分:4)
设置
df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
在指定轴上使用一项或多项操作进行汇总。
如果需要将单独的操作应用于每个单独的列,agg
将使用一个字典(或函数,字符串或字符串/函数列表),该字典可让您在单个表中创建该映射声明。因此,如果您想要第sum
列的a
和第mean
列的b
:
df.agg({'a': 'sum', 'b': 'mean'})
a 6.0
b 5.0
dtype: float64
它还允许您在单个语句中将多个操作应用于单个列。例如,要查找列sum
的{{1}},mean
和std
:
a
将df.agg({'a': ['sum', 'mean', 'std']})
a
sum 6.0
mean 2.0
std 1.0
与单个操作一起使用时,结果没有差异。我认为agg
不如df.agg('sum')
清晰,但结果将是相同的:
df.sum()
df.agg('sum')
a 6
b 15
dtype: int64
df.sum()
a 6
b 15
dtype: int64
提供的主要好处是应用多个操作的便利。
答案 1 :(得分:2)
如果仅传递一个函数,则使用groupby('variable').agg('sum')
可能会过大。通常用于汇总多个功能,例如.agg(['sum', 'mean'])
。
仅传递一个函数时,结果应该是相同的,尽管.agg()
解析参数时会产生更多开销。
>>> from pandas.util import testing as tm
>>> import numpy as np
>>> np.random.seed(444)
>>> df = tm.makeDataFrame()
>>> grp = df.groupby(df['A'] > 0)
>>> a = grp.agg('sum')
>>> b = grp.sum()
>>> tm.assert_frame_equal(a, b)
.agg()
与多种功能的典型用法如下:
>>> grp[['A', 'C']].agg(('sum', 'mean'))
A C
sum mean sum mean
A
False -16.111352 -0.805568 0.423394 0.021170
True 9.435939 0.943594 4.788035 0.478803