合并后绘制2个数据帧

问题描述 投票:0回答:2

我有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

我怎么能只有2个具有共同X轴的图并且差异反映在Y轴上?请注意,我想在连接数据框df1df2并在plot上调用df3之后执行此操作

python pandas dataframe matplotlib
2个回答
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
投票

试试:

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的方法:绘制日期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()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.