pandas.core.groupby.DataFrameGroupBy.agg#
- DataFrameGroupBy.agg(func=None, *args, engine=None, engine_kwargs=None, **kwargs)[源代码]#
沿指定轴使用一个或多个操作进行聚合。
- Parameters:
- funcfunction, str, list, dict or None
用于聚合数据的函数。如果是函数,则必须能在传递 DataFrame 时工作,或者能在传递给 DataFrame.apply 时工作。
可接受的组合有:
function
字符串函数名
函数和/或函数名的列表,例如
[np.sum, 'mean']轴标签 -> 函数、函数名或其列表的字典。
None,在这种情况下,
**kwargs与命名聚合一起使用。此处输出包含**kwargs的每个元素的列。列的名称是关键字,而值决定了用于计算列中值的聚合。使用
engine='numba'指定时,也可以接受 Numba JIT 函数。使用此引擎仅支持传递单个函数。如果选择了
'numba'引擎,则该函数必须是一个用户定义的函数,其函数签名中的第一个和第二个参数分别为values和index。每个组的索引将传递给用户定义的函数,并可供使用。
- *args
传递给 func 的位置参数。
- enginestr,默认 None
'cython': 通过 cython 的 C 扩展运行函数。'numba': 通过 numba 的 JIT 编译代码运行函数。None: 默认为'cython'或全局设置的compute.use_numba
- engine_kwargsdict, 默认为 None
对于
'cython'引擎,没有可接受的engine_kwargs对于
'numba'引擎,该引擎可以接受nopython、nogil和parallel字典键。值必须是True或False。'numba'引擎的默认engine_kwargs为{'nopython': True, 'nogil': False, 'parallel': False},并将应用于函数
- **kwargs
如果
func为 None,则使用**kwargs通过命名聚合定义输出名称和聚合。请参阅func条目。否则,将传递给 func 的关键字参数。
- Returns:
- DataFrame
参见
DataFrame.groupby.apply按组应用函数 func 并将结果组合在一起。
DataFrame.groupby.transform根据给定函数对每个组中的 Series 进行转换。
DataFrame.aggregate沿指定轴使用一个或多个操作进行聚合。
Notes
使用
engine='numba'时,内部不会有“回退”行为。组数据和组索引将作为 numpy 数组传递给 JITed 用户定义的函数,并且不会尝试其他执行。修改传入对象的函数可能会导致意外行为或错误,因此不受支持。有关详细信息,请参阅 使用用户定义函数 (UDF) 方法进行变异 。
在 1.3.0 版本发生变更: 结果的 dtype 将反映传递的
func的返回值,请参阅下面的示例。Examples
>>> 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