Как сохранить индекс при использовании pd.melt и объединить для создания DataFrame для Seaborn и matplotlib - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь нарисовать вспомогательные участки, используя два идентичных кадра данных (прогнозируемых и наблюдаемых) с точно такой же структурой ... первый столбец - индекс

Приведенный ниже код создает новый индекс, когда они объединяются с использованием pd.melt.и объединить, как вы можете видеть на рисунке, индекс оранжевой линии изменен с 1-5 на 6-10

Мне было интересно, не могли бы некоторые исправить код ниже, чтобы сохранить тот же индекс для оранжевой линии:

import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline

actual = pd.DataFrame({'a': [5, 8, 9, 6, 7, 2],
                       'b': [89, 22, 44, 6, 44, 1]})
predicted = pd.DataFrame({'a': [7, 2, 13, 18, 20, 2],
                       'b': [9, 20, 4, 16, 40, 11]})

# Creating a tidy-dataframe to input under seaborn
merged = pd.concat([pd.melt(actual), pd.melt(predicted)]).reset_index()
merged['category'] = ''
merged.loc[:len(actual)*2,'category'] = 'actual'
merged.loc[len(actual)*2:,'category'] = 'predicted'

g = sns.FacetGrid(merged, col="category", hue="variable")
g.map(plt.plot, "index", "value", alpha=.7)
g.add_legend();

enter image description here

1 Ответ

0 голосов
/ 15 декабря 2018

Оранжевая линия ('variable' == 'b') не имеет индекса 0-5 из-за того, как вы использовали melt.Если вы посмотрите на pd.melt(actual), индекс не соответствует ожидаемому, IIUC.

Вот как я бы переставил фрейм данных:

merged = pd.concat([actual, predicted], keys=['actual', 'predicted'])
merged.index.names = ['category', 'index']
merged = merged.reset_index()
merged = pd.melt(merged, id_vars=['category', 'index'], value_vars=['a', 'b'])
...