pandas.core.groupby.DataFrameGroupBy.aggregate#

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

使用指定轴上的一个或多个操作进行聚合。

参数
func函数、字符串、列表或字典

用于聚合数据的函数。如果是函数,则在传递DataFrame或传递给DataFrame.Apply时必须工作。

可接受的组合包括:

  • 功能

  • 字符串函数名

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

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

还可以接受Numba JIT函数 engine='numba' 指定的。此引擎仅支持传递单个函数。

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

在 1.1.0 版更改.

*args

要传递给函数的位置参数。

engine字符串,默认为无
  • 'cython' :从cython通过C扩展运行函数。

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

  • None : Defaults to 'cython' or globally setting compute.use_numba

1.1.0 新版功能.

engine_kwargsDict,默认无
  • 'cython' 发动机,有没有接受 engine_kwargs

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

1.1.0 新版功能.

**kwargs

要传递给函数的关键字参数。

退货
DataFrame

参见

DataFrame.groupby.apply

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

DataFrame.groupby.transform

使用指定轴上的一个或多个操作进行聚合。

DataFrame.aggregate

根据给定函数对每组上的级数进行变换。

注意事项

在使用时 engine='numba' ,在内部不会有“后退”的行为。组数据和组索引将作为NumPy数组传递给JITed用户定义函数,不会尝试其他执行尝试。

改变传递的对象的函数可能会产生意外的行为或错误,因此不受支持。看见 使用用户定义函数(UDF)方法进行变异 了解更多详细信息。

在 1.3.0 版更改: 结果数据类型将反映传递的 func ,请参见下面的示例。

示例

>>> df = pd.DataFrame(
...     {
...         "A": [1, 1, 2, 2],
...         "B": [1, 2, 3, 4],
...         "C": [0.362838, 0.227877, 1.267767, -0.562860],
...     }
... )
>>> 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({'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 版更改: 结果数据类型将反映聚合函数的返回值。

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