Python 重塑多索引以分离

Python 重塑多索引以分离,python,pandas,multi-index,Python,Pandas,Multi Index,在阅读了pandas和MultiIndex的文档以及这里的许多帖子之后,我仍然没有完全理解这个概念。谁能帮我找到这一行代码吗 我想从xls文件中的数据创建箱线图。线索是显示两个箱线图,一个用于参数=33,另一个用于参数=77。因此,我的数据集需要按参数拆分结果。由于我没有完全理解这个概念,任何尝试去堆叠的尝试都以某种方式失败了 # -*- coding: utf-8 -*- import pandas import numpy as np wbName= "Test (1).xlsx" wsNa

在阅读了pandas和MultiIndex的文档以及这里的许多帖子之后,我仍然没有完全理解这个概念。谁能帮我找到这一行代码吗

我想从xls文件中的数据创建箱线图。线索是显示两个箱线图,一个用于参数=33,另一个用于参数=77。因此,我的数据集需要按参数拆分结果。由于我没有完全理解这个概念,任何尝试去堆叠的尝试都以某种方式失败了

# -*- coding: utf-8 -*-
import pandas
import numpy as np
wbName= "Test (1).xlsx"
wsName = "Sheet1"
sort_by=['Name','Parameter']
df = pandas.read_excel(open(wbName, "rb"), sheetname=wsName)
id_col=list()
for sb in sort_by:
    id_col.append(np.where(df.columns.values==sb)[0][0])
df = pandas.read_excel(open(wbName, "rb"), sheetname=wsName, index_col=id_col)
print(df)
#oneline magic needed
df.plot.box()
因此,打印(df)返回(如预期的那样)

但我假设我只需要一行就可以了(上面的数字不是macthing)


问题是您的
pd.MultiIndex
不是唯一的

假设您的序列是
s

df = pd.DataFrame({n: g.reset_index(drop=True) for n, g in s.groupby(level=[0, 1])})
df.stack(0).reset_index(0, drop=True).sort_index()


设置
我已经更新了我的帖子。
Result             
Parameter        33   77
Name         
sdf               99   567
                  99   45
                  99   456
                 645   456
                 345   456 
ere               99   546 
                  99  465
                  99  456 
                 645  46 
df = pd.DataFrame({n: g.reset_index(drop=True) for n, g in s.groupby(level=[0, 1])})
df.stack(0).reset_index(0, drop=True).sort_index()
import pandas as pd
from io import StringIO

txt = """Name Parameter   Value    
sdf  33             99
sdf  33             99
sdf  33             99
sdf  33            645
sdf  33            345
sdf  77            567
sdf  77             45
sdf  77            456
sdf  77            456
sdf  77            234
sdf  77            576
sdf  77             45
ere  33             99
ere  33             99
ere  33             99
ere  33            645
ere  33            345
ere  77            567
ere  77             45
ere  77            456
ere  77            456
ere  77            234
ere  77            576
ere  77             45"""

s = pd.read_csv(StringIO(txt), delim_whitespace=True, index_col=[0, 1], squeeze=True)