如何在Pandas多索引列DataFrame绘图时指定secondary_y列?
解决多索引列DataFrame指定secondary_y的问题
我来帮你搞定这个多索引列的绘图问题!你之前的写法没起效,是因为没掌握Pandas处理多索引列标签时的参数规则,下面给你详细说明:
问题根源
你尝试的两种写法:
df.plot(secondary_y=('B', 'second')) df.plot(secondary_y='(B, second)')
第一种里,('B', 'second')会被Pandas拆解成两个独立的列名('B'和'second'),但你的DataFrame列是多索引结构,不存在单独叫这两个名字的列,所以Pandas无法识别,就默认把所有列都画在主坐标轴上;第二种用字符串包裹元组的方式更不对,Pandas根本不会把它解析成多索引标签。
正确语法
对于多索引列,你需要把完整的列标签(也就是那个二元元组)放到列表里传给secondary_y,这样Pandas才会把它当成一个完整的多索引列来识别。
单个列放到次坐标轴
df.plot(secondary_y=[('B', 'second')])
多个列放到次坐标轴
如果需要把多个多索引列都放到次轴,直接在列表里添加更多元组即可:
df.plot(secondary_y=[('B', 'second'), ('A', 'first')])
完整测试示例
你可以直接运行这段代码验证效果:
import numpy as np import pandas as pd # 搭建测试环境 mt_idx = pd.MultiIndex.from_product([['A', 'B'], ['first', 'second']]) df = pd.DataFrame(np.random.randint(0, 10, size=(20, len(mt_idx))), columns=mt_idx) # 正确绘制次坐标轴 ax = df.plot(secondary_y=[('B', 'second')]) # 给次轴加标签方便区分 ax.right_ax.set_ylabel('Secondary Y Axis')
运行后你会看到('B', 'second')对应的线条出现在右侧的次坐标轴上,其他列在左侧主坐标轴,完全符合你的需求。
内容的提问来源于stack exchange,提问作者FLab
相关产品推荐
相关产品推荐

