pandas.core.groupby.GroupBy.apply#

GroupBy.apply(func, *args, **kwargs)[源代码]#

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

传递给 apply 必须将DataFrame作为其第一个参数,并返回DataFrame、Series或标量。 apply 然后,将负责将结果组合在一起,形成单个数据帧或系列。 apply 因此是一种高度灵活的分组方法。

而当 apply 是一种非常灵活的方法,其缺点是使用它可能比使用更具体的方法慢得多,比如 aggtransform 。Pandas提供了广泛的方法,比使用 apply 为了它们的特定目的,所以在伸手之前尝试使用它们 apply

参数
func可调用

将DataFrame作为第一个参数并返回DataFrame、序列或标量的可调用函数。此外,Callable可以采用位置参数和关键字参数。

Args,Kwargs,Args,Kwargs元组和字典

要传递到的可选位置参数和关键字参数 func

退货
applied系列或DataFrame

参见

pipe

将函数应用于整个GroupBy对象,而不是每个组。

aggregate

将聚合函数应用于GroupBy对象。

transform

将函数逐列应用于GroupBy对象。

Series.apply

将函数应用于系列。

DataFrame.apply

将函数应用于DataFrame的每行或每列。

注意事项

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

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

示例

>>> df = pd.DataFrame({'A': 'a a b'.split(),
...                    'B': [1,2,3],
...                    'C': [4,6,5]})
>>> g = df.groupby('A')

请注意, g 有两个组, ab 。叫唤 apply 通过不同的方式,我们可以得到不同的分组结果:

示例1:传递给的函数下面 apply 将DataFrame作为其参数并返回DataFrame。 apply 将每个组的结果合并到一个新的DataFrame中:

>>> g[['B', 'C']].apply(lambda x: x / x.sum())
          B    C
0  0.333333  0.4
1  0.666667  0.6
2  1.000000  1.0

示例2:传递给的函数 apply 将DataFrame作为其参数并返回一个Series。 apply 将每个组的结果合并到一个新的DataFrame中。

在 1.3.0 版更改: 结果数据类型将反映传递的 func

>>> g[['B', 'C']].apply(lambda x: x.astype(float).max() - x.min())
     B    C
A
a  1.0  2.0
b  0.0  0.0

示例3:传递给的函数 apply 将DataFrame作为其参数并返回标量。 apply 将每个组的结果合并到一个系列中,包括根据需要设置索引:

>>> g.apply(lambda x: x.C.max() - x.B.min())
A
a    5
b    2
dtype: int64