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

如何消除Pandas DataFrame多级索引,设置普通列名以方便绘图

解决Pandas多级列名问题,轻松实现绘图

这个多级列名确实挺烦人的,尤其是要绘图的时候!我给你两个简单的解决办法,一个是从源头避免生成多级列,另一个是修改已经生成的df的列名:

方法一:聚合阶段直接指定列名(推荐)

在agg的时候用字典形式指定每一列的聚合规则和新列名,这样就不会生成带Lifeexp的多级索引了,一步到位:

# 直接在聚合时定义列名,避免多级索引
df = sample[['Place','Lifeexp']].groupby('Place').agg(
    count=('Lifeexp', 'count'),
    mean=('Lifeexp', 'mean'),
    max=('Lifeexp', 'max'),
    min=('Lifeexp', 'min')
).reset_index()
# 排序操作不变
df = df.sort_values('count', ascending=False)

这样生成的df列名就是Place、count、mean、max、min,直接就能执行df.plot.bar(x = "Place", y = 'count')绘图了。

方法二:修改已生成的多级列名

如果已经得到了带多级列的df,可以直接重新设置列名,或者通过列表推导式处理:

方式1:直接赋值列名(简单直观)

看你给出的列索引顺序,直接按顺序赋值新列名即可:

# 重新设置列名
df.columns = ['Place', 'count', 'mean', 'max', 'min']
# 之后排序和绘图都正常
df = df.sort_values('count', ascending=False)
df.plot.bar(x = "Place", y = 'count')

方式2:通用处理多级列名

如果列的顺序不确定,用列表推导式自动提取有效列名:

# 遍历多级列名,保留Place,提取Lifeexp下的子列名
df.columns = [col[1] if col[0] == 'Lifeexp' else col[0] for col in df.columns]

两种方法都能帮你去掉Lifeexp层级,让列名变得简洁,轻松完成绘图操作~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:57:01