pandas.core.groupby.DataFrameGroupBy.apply # DataFrameGroupBy。apply ( func , * args , include_groups = True , ** kwargs ) [来源] # 逐组应用函数func并将结果组合在一起。 传递给的函数apply必须将数据帧作为其第一个参数并返回数据帧、系列或标量。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) 方法进行变异。 例子 >>> df = pd.DataFrame({'A': 'a a b'.split(), ... 'B': [1, 2, 3], ... 'C': [4, 6, 5]}) >>> g1 = df.groupby('A', group_keys=False) >>> g2 = df.groupby('A', group_keys=True) 请注意,g1和g2有两个组,a和b, 和 仅在group_keys参数上有所不同。通过多种方式调用apply,我们可以得到不同的分组结果: 示例 1:下面传递给apply 的函数采用 DataFrame 作为其参数并返回 DataFrame。apply 将每个组的结果组合到一个新的 DataFrame 中: >>> g1[['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 在上面,组不是索引的一部分。我们可以通过使用g2where将它们包括在内group_keys=True: >>> g2[['B', 'C']].apply(lambda x: x / x.sum()) B C A a 0 0.333333 0.4 1 0.666667 0.6 b 2 1.000000 1.0 示例 2:传递给apply 的函数采用 DataFrame 作为其参数并返回 Series。apply将每个组的结果组合到一个新的 DataFrame 中。 版本 1.3.0 中更改:生成的 dtype 将反映传递的返回值func。 >>> g1[['B', 'C']].apply(lambda x: x.astype(float).max() - x.min()) B C A a 1.0 2.0 b 0.0 0.0 >>> g2[['B', 'C']].apply(lambda x: x.astype(float).max() - x.min()) B C A a 1.0 2.0 b 0.0 0.0 该group_keys参数在这里不起作用,因为与输入相比,结果不是类似索引的(即转换)。 示例 3:传递给apply 的函数采用 DataFrame 作为其参数并返回一个标量。apply 将每个组的结果组合在一起形成一个系列,包括适当设置索引: >>> g1.apply(lambda x: x.C.max() - x.B.min(), include_groups=False) A a 5 b 2 dtype: int64