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

如何移除DataFrame的多级索引?解决groupby.agg后的索引冗余问题

移除DataFrame双层列索引的第二层

问题场景

对初始DataFrame执行df.groupby().agg()方法后,得到了如下带双层列索引的结果,需要移除包含median、q1、q2的第二层索引:

X              Y      Z     W            A     B       C     D
      median         median   q1   q2          median median median median 
0   0.765699            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
1   0.852869            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
2   0.751222            0.0  0.0  2.0             0.0    0.0    0.0    0.0   
3   0.899825            0.0  2.0  2.0             0.0    0.0    0.0    0.0   
4   0.876273            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
..       ...            ...  ...  ...             ...    ...    ...    ...   
95  0.960199            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
96  0.940533            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
97  0.843790            0.0  1.0  1.0             0.0    0.0    0.0    0.0   
98  0.969018            0.0  0.0  0.0             0.0    0.0    0.0    0.0   
99  0.956095            0.0  1.0  1.0             0.0    0.0    0.0    0.0   

解决方案

方法1:用droplevel直接移除层级

这是最直接的方式,通过指定层级编号(第二层是索引1,层级从0开始计数)移除:

# 修改原DataFrame的列索引
df.columns = df.columns.droplevel(1)

# 或者直接返回新的DataFrame
df = df.droplevel(1, axis=1)

方法2:提取第一层索引作为列名

直接获取第一层的列标签(X/Y/Z/W/A/B/C/D)赋值给列:

df.columns = df.columns.get_level_values(0)

方法3:聚合阶段避免生成双层索引

如果不想后续处理,可以在agg时直接指定列名,提前生成单层索引:

# 示例:根据你的聚合逻辑自定义
df_grouped = df.groupby(你的分组列).agg(
    X=('X', 'median'),
    Y=('Y', 'median'),
    Z=('Z', 'q1'),
    W=('W', 'q2'),
    A=('A', 'median'),
    B=('B', 'median'),
    C=('C', 'median'),
    D=('D', 'median')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:30:04