使用Pandas .groupby时,为什么要使用.agg而不是直接使用.sum()函数

时间:2018-08-14 20:20:03

标签: python pandas pandas-groupby

在Python中,要按组获取摘要,请使用groupby().agg(fx());例如groupby('variable').agg('sum')。那和直接使用功能有什么区别,例如; groupby('variable').sum()吗?

2 个答案:

答案 0 :(得分:4)

设置

df = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})

agg中说明了使用the docs的主要好处:

  

在指定轴上使用一项或多项操作进行汇总。

如果需要将单独的操作应用于每个单独的列,agg将使用一个字典(或函数,字符串或字符串/函数列表),该字典可让您在单个表中创建该映射声明。因此,如果您想要第sum列的a和第mean列的b

df.agg({'a': 'sum', 'b': 'mean'})

a    6.0
b    5.0
dtype: float64

它还允许您在单个语句中将多个操作应用于单个列。例如,要查找列sum的{​​{1}},meanstd

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