在multiindex中相互绘制两个pandas数据帧列

时间:2017-12-13 13:23:24

标签: python pandas dataframe plot

比方说,我们有一个pandas DataFrame:

df = pd.DataFrame(np.array([[1,2,3,4,5],[3,4,5,6,7]]).T, columns=['a','b'])

print(df)

给了我:

   a  b
0  1  3
1  2  4
2  3  5
3  4  6
4  5  7

如果我尝试在'b'列上绘制'a'列,我可以非常简单地执行:

df.plot(x='a', y='b')
plt.show()

所以我确实得到了我的图表。

但如果我在列上有一个带有MultiIndex的DataFrame,那么我有一个问题:

df = pd.DataFrame(np.array([[1,2,3,4,5],[3,4,5,6,7]]).T, columns=[['a','b'],['y','w']])

print(df)

给了我:

   a  b
   y  w
0  1  3
1  2  4
2  3  5
3  4  6
4  5  7

所以,如果我现在这样做:

df.plot(x=['a','y'], y=['b','w'])
plt.show()

我收到以下错误:

File "pandas/_libs/index.pyx", line 117, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 139, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/hashtable_class_helper.pxi", line 1265, in pandas._libs.hashtable.PyObjectHashTable.get_item
File "pandas/_libs/hashtable_class_helper.pxi", line 1273, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 'y'

我做错了吗?

或者当使用MultiIndex时,pandas无法绘制?

2 个答案:

答案 0 :(得分:1)

试试这个:

df.set_index(('a','y')).plot()

结果:

enter image description here

答案 1 :(得分:0)

我认为这是一种更直接的方法:

df.plot(x=('a','y'), y=('b','w'))