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有两个组,a和b。请注意,g1有g2两个组a和b,并且仅在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