我有2个不同的数据框,它们具有相同的列date
。现在,我想绘制这些数据框,其中X
轴上的值是数据帧共有的date
列,Y
轴是value
。此外,我想在将两个数据帧连接到第三帧之后执行此操作。目前这是我做的:
df1 = pd.DataFrame({'value': [1,2,3,4,5], 'date': [20,40,60,80,100]})
df2 = pd.DataFrame({'value': [11,21,31,41,51], 'date': [20,40,60,80,100]})
df3 = pd.concat([df1, df2], keys=['df1','df2'], axis=1)
df3.plot()
plt.show()
但结果情节不是我想要的。从图例中可以看出它生成了4个图。
我怎么能只有2个具有共同X
轴的图并且差异反映在Y
轴上?请注意,我想在连接数据框df1
和df2
并在plot
上调用df3
之后执行此操作
您可以在连接之前使用“日期”列作为索引。
df1 = pd.DataFrame({'value': [1,2,3,4,5], 'date': [20,40,60,80,100]})
df2 = pd.DataFrame({'value': [11,21,31,41,51], 'date': [20,40,60,80,100]})
df3 = pd.concat([df1.set_index("date"), df2.set_index("date")], keys=['df1','df2'], axis=1)
df3.plot()
这将创建一个仅包含两个“值”列且日期作为索引的数据框。绘制索引时使用的是x值,每列绘制一条线。
您也可以忽略忽略列索引并稍后设置新列名
df3 = pd.concat([df1.set_index("date"), df2.set_index("date")], axis=1, ignore_index =True)
df3.columns=['df1','df2']
或者,您可以在连接后删除两列中共有的索引级别。
df3 = pd.concat([df1.set_index("date"), df2.set_index("date")], keys=['df1','df2'], axis=1)
df3.columns = df3.columns.droplevel(level=1)
试试:
df3=pd.merge(df1,df2,on='date')
df3.plot.line(x="date")
plt.show()
首先,因为日期似乎相同,您可以合并日期列
df3=pd.merge(df1,df2,on='date')
value_x date value_y
0 1 20 11
1 2 40 21
2 3 60 31
3 4 80 41
4 5 100 51
另一种使用matplotlib的方法:绘制日期vs value_x和date vs value_y
plt.plot(df3["date"],df3["value_x"],label="df1")
plt.plot(df3["date"],df3["value_y"],label="df2")
plt.legend()
plt.show()