pandas.core.groupby.DataFrameGroupBy.aggregate#

DataFrameGroupBy.aggregate(func=None, *args, engine=None, engine_kwargs=None, **kwargs)[源代码][源代码]#

使用一个或多个操作进行聚合。

参数:
func函数, 字符串, 列表, 字典 或 无

用于聚合数据的函数。如果是一个函数,必须能够在传递 DataFrame 时工作,或者在传递给 DataFrame.apply 时工作。

接受的组合是:

  • 函数

  • 字符串函数名称

  • 函数列表和/或函数名,例如 [np.sum, 'mean']

  • 索引标签的字典 -> 函数、函数名或此类列表。

  • 如果没有指定,则使用 **kwargs 进行命名聚合。这里输出有一列对应 **kwargs 中的每个元素。列的名称是关键字,而值决定了用于计算列中值的聚合方式。

    也可以接受一个带有 engine='numba' 指定的 Numba JIT 函数。仅支持使用此引擎传递单个函数。

    如果选择了 'numba' 引擎,该函数必须是用户定义的函数,其函数签名中的第一个和第二个参数分别为 valuesindex。每个组的索引将被传递给用户定义的函数,并可选择用于使用。

*args

传递给 func 的位置参数。

引擎str, 默认为 None
  • 'cython' : 通过cython的C扩展运行函数。

  • 'numba' : 通过来自 numba 的 JIT 编译代码运行函数。

  • None : 默认为 'cython' 或全局设置 compute.use_numba

engine_kwargs字典, 默认为 None
  • 对于 'cython' 引擎,没有接受的 engine_kwargs

  • 对于 'numba' 引擎,引擎可以接受 nopythonnogilparallel 字典键。值必须是 TrueFalse'numba' 引擎的默认 engine_kwargs{'nopython': True, 'nogil': False, 'parallel': False},并将应用于函数。

**kwargs
  • 如果 func 是 None,**kwargs 用于通过命名聚合定义输出名称和聚合。请参见 func 条目。

  • 否则,要传递给 func 的关键字参数。

返回:
DataFrame

参见

DataFrame.groupby.apply

按组应用函数 func 并将结果合并在一起。

DataFrame.groupby.transform

基于给定的函数转换每个组中的 Series。

DataFrame.aggregate

使用一个或多个操作进行聚合。

备注

当使用 engine='numba' 时,内部不会有“回退”行为。组数据和组索引将作为 numpy 数组传递给 JITed 用户定义函数,并且不会尝试替代执行。

修改传递对象的函数可能会产生意外行为或错误,并且不受支持。更多详情请参见 使用用户定义函数 (UDF) 方法进行变异

在 1.3.0 版本发生变更: 生成的 dtype 将反映传递的 func 的返回值,请参见下面的示例。

例子

>>> data = {"A": [1, 1, 2, 2],
...         "B": [1, 2, 3, 4],
...         "C": [0.362838, 0.227877, 1.267767, -0.562860]}
>>> df = pd.DataFrame(data)
>>> df
   A  B         C
0  1  1  0.362838
1  1  2  0.227877
2  2  3  1.267767
3  2  4 -0.562860

聚合是针对每一列的。

>>> df.groupby('A').agg('min')
   B         C
A
1  1  0.227877
2  3 -0.562860

多重聚合

>>> df.groupby('A').agg(['min', 'max'])
    B             C
  min max       min       max
A
1   1   2  0.227877  0.362838
2   3   4 -0.562860  1.267767

选择一个列进行聚合

>>> df.groupby('A').B.agg(['min', 'max'])
   min  max
A
1    1    2
2    3    4

用户定义的聚合函数

>>> df.groupby('A').agg(lambda x: sum(x) + 2)
    B          C
A
1       5       2.590715
2       9       2.704907

每列不同的聚合

>>> df.groupby('A').agg({'B': ['min', 'max'], 'C': 'sum'})
    B             C
  min max       sum
A
1   1   2  0.590715
2   3   4  0.704907

为了通过不同的聚合控制每列的输出名称,pandas 支持 “命名聚合”

>>> df.groupby("A").agg(
...     b_min=pd.NamedAgg(column="B", aggfunc="min"),
...     c_sum=pd.NamedAgg(column="C", aggfunc="sum")
... )
   b_min     c_sum
A
1      1  0.590715
2      3  0.704907
  • 关键词是 输出 列名

  • 这些值是元组,其第一个元素是要选择的列,第二个元素是要对该列应用的聚合。Pandas 提供了 pandas.NamedAgg 命名元组,字段为 ['column', 'aggfunc'],以更清楚地说明参数是什么。像往常一样,聚合可以是一个可调用对象或字符串别名。

更多信息请参见 命名聚合

在 1.3.0 版本发生变更: 生成的 dtype 将反映聚合函数的返回值。

>>> df.groupby("A")[["B"]].agg(lambda x: x.astype(float).min())
      B
A
1   1.0
2   3.0