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