You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas groupby多级分组如何提取任意层级分组名称值

解决方案

问题背景

现有15行数据的Pandas DataFrame对象df,包含['group_A', 'group_B', 'group_C']三个分组列,每个分组列包含2种取值(例如group_A的取值为a1、a2),三级分组计数结构如下:

>>> display(df.groupby(['group_A','group_B','group_C']).size())
group_A  group_B  group_C   
a1       b1       c1         1
         b2       c1         2
                  c2         2
a2       b1       c1         1
         b2       c1         1
                  c2         8
Name: size, dtype: int64

目前通过.size()方法可提取到计数序列[1,2,2,1,1,8],需要按相同分组排序提取最内层group_C的对应取值序列[c1,c1,c2,c1,c1,c2]。

注:示例中调用groupby时仅传入了前两个分组字段,无法获取第三层group_C的分组信息,需要将三个分组字段全部传入groupby参数。

具体实现

  • 方法1:操作多级索引直接提取层级值
    分组结果默认生成三级多级索引,直接调用索引接口提取对应层级的取值即可,取值顺序和计数序列完全对齐:
# 完成三级分组统计
group_stat = df.groupby(['group_A', 'group_B', 'group_C']).size()
# 提取计数序列
row_count_list = group_stat.tolist()
# 提取group_C层级的取值,既可以传层级名,也可以传层级序号(从0开始,第三层序号为2)
group_c_list = group_stat.index.get_level_values('group_C').tolist()

运行后group_c_list输出即为['c1', 'c1', 'c2', 'c1', 'c1', 'c2']。

  • 方法2:关闭分组索引转普通表取列
    分组时传入as_index=False可以让分组结果返回普通结构化DataFrame,直接取对应列即可:
group_stat_df = df.groupby(['group_A', 'group_B', 'group_C'], as_index=False).size()
row_count_list = group_stat_df['size'].tolist()
group_c_list = group_stat_df['group_C'].tolist()

内容的提问来源于stack exchange,提问作者rnoodle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 14:06:22