Pandas多级索引DataFrame按a、d分组绘制c为X轴的折线图实现方法
目标绘图效果实现的正确操作逻辑
核心前提:Pandas内置绘图方法默认将DataFrame的行索引作为X轴,将每一列作为独立Y值序列生成折线,因此只要把数据结构调整到“行索引为c、每列对应一组(a,d)参数组合的mean_traf_tie值”,即可直接生成符合要求的图表。
之前操作的偏差原因
- 直接运行
df.plot():未对多层索引做结构转换时,pandas会把a、d、c三个层级的行索引全部拼接为X轴的离散分类标签,无法以连续的c值生成单条连续横轴。 - 仅执行
unstack(level=0)后绘图:仅将最外层的a索引移到列上,d和c仍然留在行索引中,最终X轴会叠加d的取值,既无法让c成为唯一横轴,也无法按(a,d)组合拆分独立折线。
分步正确操作
- 调整多层索引结构,将a、d两个层级从行索引移到列索引,仅保留c作为唯一行索引。使用索引名称指定unstack的目标层级,无需依赖层级序号,可避免因索引顺序混淆出错:
执行后可通过# 选中mean_traf_tie列,指定将a、d两个索引层级从行转列 plot_ready = df["mean_traf_tie"].unstack(level=["a", "d"])plot_ready.index.names校验:如果返回值仅为['c'],说明索引转换正确,此时每一列对应一组(a,d)组合的mean_traf_tie序列。 - 直接调用绘图方法,即可自动匹配X轴为c值、按(a,d)组合生成独立折线:
plot_ready.plot() - 可选优化:简化多层索引生成的图例,让图表可读性更强
将嵌套的列名拼接为清晰的参数标签,替换原本的多级列名:plot_ready.columns = [f"a={a_val}, d={d_val}" for a_val, d_val in plot_ready.columns] plot_ready.plot()
注意:unstack操作的核心逻辑是「选中需要从行移到列的索引层级」,剩下留在行索引的部分就是最终的X轴来源,调整层级参数时只需保证最终行索引只包含c值即可。
内容的提问来源于stack exchange,提问作者Reut
相关产品推荐
相关产品推荐

