Python 使用pd.melt和merge为Seaborn和matplotlib创建数据帧时如何保留索引

Python 使用pd.melt和merge为Seaborn和matplotlib创建数据帧时如何保留索引,python,pandas,matplotlib,seaborn,facet-grid,Python,Pandas,Matplotlib,Seaborn,Facet Grid,我试图用两个完全相同的数据帧(预测和观察)和完全相同的结构来绘制子图。。。第一列是索引 下面的代码在使用pd.melt和merge连接它们时生成新索引 如图所示,橙色线的索引从1-5更改为6-10 我想知道是否有人可以修复下面的代码,以便为橙色线保留相同的索引: import pandas as pd import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline actual = pd.DataFrame({

我试图用两个完全相同的数据帧(预测和观察)和完全相同的结构来绘制子图。。。第一列是索引

下面的代码在使用pd.melt和merge连接它们时生成新索引 如图所示,橙色线的索引从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();
橙色线(
'variable'=='b'
)没有索引
0-5
,因为您使用了
melt
。如果您查看
pd.melt(实际)
,索引与您期望的不匹配,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'])

将ignore_index变量设置为false以保留索引,例如

df=df.melt(var\u name='species',value\u name='height',ignore\u index=False)