使用df.groupby(column).apply()时如何在apply上下文中获取分组列?
解决方案
你可以搭配pandas内置的pipe方法实现一行获取分组列名,不需要硬编码传参,也不需要额外定义中间变量,无需拆分链式调用结构。
核心实现逻辑
pipe方法可以将当前链式调用中的GroupBy对象作为参数传入lambda,你可以通过GroupBy对象的grouper.names属性直接拿到所有分组列的名称列表,完全符合链式调用的要求。
完整可运行示例
import pandas as pd # 构造测试数据 df = pd.DataFrame({'Animal': ['Falcon', 'Falcon', 'Parrot', 'Parrot'], 'Max Speed': [380., 370., 24., 26.]}) # 一行链式调用实现,无需硬编码分组列名 result = df.groupby(['Animal']).pipe( lambda grouped: grouped.apply( lambda sub_df: f"分组列名称:{grouped.grouper.names[0]},当前分组值:{sub_df.name}" ) ) print(result)
运行输出示例
Animal Falcon 分组列名称:Animal,当前分组值:Falcon Parrot 分组列名称:Animal,当前分组值:Parrot dtype: object
补充说明
- 如果是多列分组,
grouped.grouper.names会返回包含所有分组列名的列表,直接按需取用即可 sub_df.name是pandas GroupBy.apply传入的子DataFrame自带的属性,存储当前分组的取值,不需要额外从子DF中取数
内容的提问来源于stack exchange,提问作者user3521099
相关产品推荐
相关产品推荐

