如何对Pandas DataFrame分组后应用可访问整组的任意函数?
如何对Pandas DataFrame分组后按组应用可访问整个分组的任意函数?
要实现对分组后的每个子DataFrame应用可完整操作该分组的自定义函数,直接使用Pandas的groupby().apply()方法即可,它会将每个分组的完整DataFrame传入你的自定义函数,处理后再合并回原结构。
完整实现代码
import pandas as pd def arbitrary_function(df): """该函数接收单个分组的DataFrame,可对其执行任意Pandas操作""" # 示例:给分组添加新列,值为该组data_col的总和 df['new_col'] = df['data_col'].sum() # 返回处理后的分组DataFrame return df # 初始化原始数据 df = pd.DataFrame([[1, 2], [1, 3], [2, 6], [2, 1]], columns=["group_col", "data_col"]) # 分组并应用自定义函数 result_df = df.groupby('group_col').apply(arbitrary_function) # 重置索引(可选,恢复原始单级索引结构) result_df = result_df.reset_index(drop=True) print(result_df)
代码说明
df.groupby('group_col'):按指定列对原始DataFrame进行分组,生成GroupBy对象。.apply(arbitrary_function):对每个分组执行自定义函数,每个分组的完整DataFrame会作为参数传入函数,处理后的分组DataFrame会被自动合并为最终结果。reset_index(drop=True):可选操作,apply返回的结果默认保留多级索引,执行此步骤可恢复到和原始数据一致的单级索引结构。
运行结果
执行代码后输出与预期完全一致:
group_col data_col new_col 0 1 2 5 1 1 3 5 2 2 6 7 3 2 1 7
通用性验证
该方案完全满足要求:
- 未使用lambda函数,直接调用自定义命名函数。
- 自定义函数接收完整的分组DataFrame,可执行任意Pandas操作——比如计算复杂统计量、多列联动处理、分组过滤或结构重塑等,操作逻辑和处理普通DataFrame完全一致。
内容的提问来源于stack exchange,提问作者Atomic Tripod
相关产品推荐
相关产品推荐

