Построение 2 кадров данных после слияния - PullRequest
0 голосов
/ 08 сентября 2018

У меня есть 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? Обратите внимание, что я хочу сделать это после объединения кадров данных df1 и df2 и вызова plot на df3

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Вы можете использовать столбец "дата" в качестве индекса перед объединением.

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)
0 голосов
/ 08 сентября 2018

Попробуйте:

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: График зависимости даты от значения_x и даты от значения_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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...