合并后绘制2个数据帧

时间:2018-09-08 12:33:15

标签: python pandas dataframe matplotlib

我有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个图。

enter image description here

我怎么能有两个具有公共X轴的图,而差异却反映在Y轴上?请注意,我要在连接数据帧df1df2并通过在plot上调用df3之后执行此操作

2 个答案:

答案 0 :(得分:2)

在连接之前,可以将“日期”列用作索引。

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值,并为每列绘制一条线。

enter image description here

您也可以忽略忽略列索引,然后设置新的列名

df3 = pd.concat([df1.set_index("date"), df2.set_index("date")], axis=1, ignore_index =True)
df3.columns=['df1','df2']

enter image description here

或者在串联后删除两列共有的索引级别。

df3 = pd.concat([df1.set_index("date"), df2.set_index("date")], keys=['df1','df2'], axis=1)
df3.columns = df3.columns.droplevel(level=1)

答案 1 :(得分:1)

尝试:

df3=pd.merge(df1,df2,on='date')
df3.plot.line(x="date")
plt.show()

enter image description here

首先,由于日期似乎相同,因此可以在日期列上进行合并

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的另一种方法: 绘制日期与value_x和日期与value_y

plt.plot(df3["date"],df3["value_x"],label="df1")
plt.plot(df3["date"],df3["value_y"],label="df2")

plt.legend()
plt.show()

enter image description here