我正在尝试使用结构完全相同的两个相同的DataFrame(预测的和观察到的)绘制子图...第一列是索引
下面的代码在使用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();
答案 0 :(得分:1)
由于您使用'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'])
答案 1 :(得分:0)
将ignore_index变量设置为false以保留索引,例如
df = df.melt(var_name=‘species’, value_name=‘height’, ignore_index = False)