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))