Python 将数据帧转换为多索引数据帧

Python 将数据帧转换为多索引数据帧,python,pandas,Python,Pandas,转换为多个索引可能相当容易,但我无法理解它。我有下面的数据帧,我想转换成多个索引 我的输入数据帧: mydf= pd.DataFrame({'id':['dataid1','dataid2','dataid1','dataid1','dataid2'],'Ref':['Ref1','Ref2','Ref3','Ref4','Ref5'],'Val1':[0.7,0.5,0.8,9.0,1],'Val2':[7,8,9,1.1,2]}) mydf= mydf.set_index('id')

转换为多个索引可能相当容易,但我无法理解它。我有下面的数据帧,我想转换成多个索引

我的输入数据帧:

mydf= pd.DataFrame({'id':['dataid1','dataid2','dataid1','dataid1','dataid2'],'Ref':['Ref1','Ref2','Ref3','Ref4','Ref5'],'Val1':[0.7,0.5,0.8,9.0,1],'Val2':[7,8,9,1.1,2]})
mydf= mydf.set_index('id')

          Ref  Val1  Val2
id                       
dataid1  Ref1   0.7   7.0
dataid2  Ref2   0.5   8.0
dataid1  Ref3   0.8   9.0
dataid1  Ref4   9.0   1.1
dataid2  Ref5   1.0   2.0
    dataid1        dataid2
Ref  Val1  Val2  Ref  Val1  Val2
Ref1  0.7  7.0   Ref2  0.5  8.0
Ref3  0.8  9.0   Ref5  1.0  2.0
Ref4  9.0  1.1
所需数据帧:

mydf= pd.DataFrame({'id':['dataid1','dataid2','dataid1','dataid1','dataid2'],'Ref':['Ref1','Ref2','Ref3','Ref4','Ref5'],'Val1':[0.7,0.5,0.8,9.0,1],'Val2':[7,8,9,1.1,2]})
mydf= mydf.set_index('id')

          Ref  Val1  Val2
id                       
dataid1  Ref1   0.7   7.0
dataid2  Ref2   0.5   8.0
dataid1  Ref3   0.8   9.0
dataid1  Ref4   9.0   1.1
dataid2  Ref5   1.0   2.0
    dataid1        dataid2
Ref  Val1  Val2  Ref  Val1  Val2
Ref1  0.7  7.0   Ref2  0.5  8.0
Ref3  0.8  9.0   Ref5  1.0  2.0
Ref4  9.0  1.1

您可以创建一个
rowid
列来指示来自不同id的行之间的对应关系,然后执行
unstack/pivot

(mydf.assign(rowid = mydf.groupby('id').cumcount())
     .set_index(['id', 'rowid']).unstack(level=0)
     .swaplevel(axis=1).sort_index(axis=1))