You need to enable JavaScript to run this app. 如何使用Python可视化具有层级结构的Pandas DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python可视化具有层级结构的Pandas DataFrame

解决方案

问题原因

你通过groupby搭配多聚合函数生成的res是带多层列索引的DataFrame,列分为两层:第一层为科目(math/reading/writing),第二层为统计量(mean/var),绘图库无法直接识别这种层级结构,需要先对数据做结构转换。

步骤1:转换数据结构

推荐转为长表格式,和你需要的分组对比类图表适配性更高:

# 先重置索引,把分组键lunch从索引转为普通列,再用melt将宽表转为长表
res_long = res.reset_index().melt(
    id_vars="lunch",
    var_name=["subject", "stat"],
    value_name="score"
)
# 过滤出均值统计结果(示例图展示的是不同分组的均值对比)
res_mean = res_long[res_long["stat"] == "mean"]

步骤2:绘制目标图表

以seaborn为例,绘制对应样式的分组柱状图:

import seaborn as sns
import matplotlib.pyplot as plt

sns.barplot(data=res_mean, x="subject", y="score", hue="lunch")
plt.xlabel("科目")
plt.ylabel("平均分数")
plt.title("不同午餐类型学生的各科平均分数对比")
plt.show()

可选快速方案:拍平列索引

如果不需要复杂的绘图逻辑,也可以直接将多层列索引合并为单层:

# 合并两层列名为单个字符串,格式为「科目_统计量」
res.columns = [f"{col[0]}_{col[1]}" for col in res.columns]
# 直接调用plot方法绘图
res.plot(kind="bar", y=["math_mean", "reading_mean", "writing_mean"])
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 15:27:03