pandas.core.groupby.SeriesGroupBy.apply #

系列分组依据。apply ( func , * args , ** kwargs ) [来源] #

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

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

虽然是一种非常灵活的方法,但其缺点是使用它可能比使用更具体的方法(如或 )apply慢很多。 Pandas 提供了多种方法,这些方法比用于特定目的的方法要快得多,因此在使用它们之前请尝试使用它们。aggtransformapplyapply

参数
可调用函数

一个可调用函数,它接受一个系列作为其第一个参数,并返回一个数据帧、一个系列或一个标量。此外,可调用对象还可以采用位置参数和关键字参数。

include_groups bool, 默认 True

当为 True 时,将尝试应用于func分组(如果它们是 DataFrame 的列)。如果这引发类型错误,则将在排除分组的情况下计算结果。当为 False 时,应用时将排除分组func

2.2.0 版本中的新增内容。

自版本 2.2.0 起已弃用:已弃用将 include_groups 设置为 True。 pandas 的未来版本中只允许使用 False 值。

args、kwargs元组和 dict

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

返回
系列或数据框

也可以看看

pipe

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

aggregate

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

transform

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

Series.apply

将函数应用于系列。

DataFrame.apply

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

笔记

版本 1.3.0 中更改:生成的 dtype 将反映传递的返回值func,请参阅下面的示例。

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

例子

>>> s = pd.Series([0, 1, 2], index='a a b'.split())
>>> g1 = s.groupby(s.index, group_keys=False)
>>> g2 = s.groupby(s.index, group_keys=True)

s上面我们可以看到g有两个组,ab。请注意,g1g2两个组ab,并且仅在group_keys参数上有所不同。通过多种方式调用apply,我们可以得到不同的分组结果:

示例 1:传递给apply 的函数采用 Series 作为参数并返回 Series。apply 将每个组的结果组合在一起形成一个新的系列。

版本 1.3.0 中更改:生成的 dtype 将反映传递的返回值func

>>> g1.apply(lambda x: x * 2 if x.name == 'a' else x / 2)
a    0.0
a    2.0
b    1.0
dtype: float64

在上面,组不是索引的一部分。我们可以通过使用g2where将它们包括在内group_keys=True

>>> g2.apply(lambda x: x * 2 if x.name == 'a' else x / 2)
a  a    0.0
   a    2.0
b  b    1.0
dtype: float64

示例 2:传递给apply 的函数采用 Series 作为参数并返回标量。apply 将每个组的结果组合在一起形成一个系列,包括适当设置索引:

>>> g1.apply(lambda x: x.max() - x.min())
a    1
b    0
dtype: int64

group_keys参数在这里不起作用,因为与输入相比,结果不是类似索引的(即转换)。

>>> g2.apply(lambda x: x.max() - x.min())
a    1
b    0
dtype: int64