Python 使用pd.DataFrame中的多索引打印数据

Python 使用pd.DataFrame中的多索引打印数据,python,pandas,dataframe,plot,seaborn,Python,Pandas,Dataframe,Plot,Seaborn,我从3个不同的数据帧(都具有相同的键)导入数据,并将其组合到一个数据帧中 df1 = read_xlsx('Means_Cent') df2 = read_xlsx('Means_Rand') df3 = read_xlsx('Means_Const') df1['Key'] = 'Cent' df2['Key'] = 'Rand' df3['Key'] = 'Const' df_means = pd.concat([df1,df2,df3], keys = ['Cent', 'Rand',

我从3个不同的数据帧(都具有相同的键)导入数据,并将其组合到一个数据帧中

df1 = read_xlsx('Means_Cent')
df2 = read_xlsx('Means_Rand')
df3 = read_xlsx('Means_Const')
df1['Key'] = 'Cent'
df2['Key'] = 'Rand'
df3['Key'] = 'Const'

df_means = pd.concat([df1,df2,df3], keys = ['Cent', 'Rand', 'Const'])
现在,我想使用DataFrame.plot()创建一个绘图,在同一个图中,每个键=['Cent','Rand','Const']都有一个图

我的数据帧df_的部分意思如下:

         02_VOI  03_Solidity  04_Total_Cells
Cent  0   1.430       19.470           132.0
      1   1.415       18.880           131.0
      2   1.460       19.695           135.0
      3   1.520       19.695           141.0
Rand  0   1.430       19.205           132.0
      1   1.430       19.170           132.0
      2   1.445       19.430           133.5
      3   1.560       19.820           144.5
Const 0   1.175       22.695           108.5
      1   1.430       22.260           132.0
      2   1.180       21.090           109.0
      3   1.360       22.145           126.0
现在我想绘制02_VOI vs 04_Total_Cells,每个键应该有一个图(g1=02_VOI(分)vs 04_Total_Cells(分),g2=02_VOI(兰德)vs 04_Total_Cells(兰德)…)

我使用DataFrame.unstack()进行了尝试:

但这似乎把钥匙弄乱了。它返回9个图形(VOI(Cent,Rand,Const)与总单元格(Cent,Rand,Const)的每个组合1个图形)


感谢您的帮助,我也很高兴能为您提供有关如何更好地连接3个初始数据帧的提示。

我想我会使用Seaborn绘图来实现这一点。这要简单得多。Seaborn喜欢数据

输出:

         02_VOI  03_Solidity  04_Total_Cells
Cent  0   1.430       19.470           132.0
      1   1.415       18.880           131.0
      2   1.460       19.695           135.0
      3   1.520       19.695           141.0
Rand  0   1.430       19.205           132.0
      1   1.430       19.170           132.0
      2   1.445       19.430           133.5
      3   1.560       19.820           144.5
Const 0   1.175       22.695           108.5
      1   1.430       22.260           132.0
      2   1.180       21.090           109.0
      3   1.360       22.145           126.0
根据需要重置索引和重命名列

df_mean = df_mean.reset_index()
df_mean = df_mean.rename(columns={'level_0':'Groups','level_1':'Samples'})
_ = sns.lmplot(x='02_VOI',y='04_Total_Cells', data=df_mean, scatter=True, col='Groups',fit_reg=False)

         02_VOI  03_Solidity  04_Total_Cells
Cent  0   1.430       19.470           132.0
      1   1.415       18.880           131.0
      2   1.460       19.695           135.0
      3   1.520       19.695           141.0
Rand  0   1.430       19.205           132.0
      1   1.430       19.170           132.0
      2   1.445       19.430           133.5
      3   1.560       19.820           144.5
Const 0   1.175       22.695           108.5
      1   1.430       22.260           132.0
      2   1.180       21.090           109.0
      3   1.360       22.145           126.0
df_mean = df_mean.reset_index()
df_mean = df_mean.rename(columns={'level_0':'Groups','level_1':'Samples'})
_ = sns.lmplot(x='02_VOI',y='04_Total_Cells', data=df_mean, scatter=True, col='Groups',fit_reg=False)