pandas.core.groupby.GroupBy.apply#
- GroupBy.apply(func, *args, **kwargs)[源代码]#
应用函数
func
分组并将结果合并在一起。传递给
apply
必须将DataFrame作为其第一个参数,并返回DataFrame、Series或标量。apply
然后,将负责将结果组合在一起,形成单个数据帧或系列。apply
因此是一种高度灵活的分组方法。而当
apply
是一种非常灵活的方法,其缺点是使用它可能比使用更具体的方法慢得多,比如agg
或transform
。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
有两个组,a
和b
。叫唤 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