Python 3.x 如何将普通数据帧转换为多索引';基于一定的条件

Python 3.x 如何将普通数据帧转换为多索引';基于一定的条件,python-3.x,pandas,multi-index,Python 3.x,Pandas,Multi Index,过了很长一段时间,我参观了SO的熊猫区,得到了一个问题,这个问题的框架确实不好,因此被认为是以一种明确的方式放在这里,类似的情况我也一样:——) 以下是数据帧结构: >>> df measure Pend Job Run Job Time cls ABC [inter, batch] [101, 93] [302, 1327] [56, 131] DEF [inter, batch] [24279, 421]

过了很长一段时间,我参观了SO的熊猫区,得到了一个问题,这个问题的框架确实不好,因此被认为是以一种明确的方式放在这里,类似的情况我也一样:——)

以下是数据帧结构:

>>> df
       measure      Pend Job       Run Job       Time
cls
ABC  [inter, batch]     [101, 93]   [302, 1327]  [56, 131]
DEF  [inter, batch]  [24279, 421]  [4935, 5452]  [75, 300]
期望的输出是。。。 我努力工作,但没有得到任何解决方案,因此,尽管在这里画草图,因为我希望它能实现

----------------------------------------------------------------------------------
    |                 |Pend Job     |       Run Job       |     Time             |
cls | measure         |-----------------------------------------------------------
    |                 |inter | batch|       |inter | batch|     |inter | batch   |
----|-----------------|------|------|-------|------|------|-----|------|----------                    
ABC |inter, batch     |101   |93    |       |302   |1327  |     |56    |131      |
----|-----------------|-------------|-------|------|------|-----|------|---------|
DEF |inter, batch     |24279 |421   |       |4935  |5452  |     |75    |300      |
----------------------------------------------------------------------------------
表示我希望我的数据帧进入多索引数据帧,其中
Pend Job
Run Job
Time
如上所述位于顶部

编辑:
cls
不在列中

这是我的方法,您可以根据需要修改它:

s = (df.drop('measure', axis=1)                   # remove the measure column
       .set_index(df['measure'].apply(', '.join), 
                  append=True)                    # make `measure` second level index
       .stack().explode().to_frame()              # concatenate all the values
    )

# assign `inter` and `batch` label to each new cell
new_lvl = np.array(['inter','batch'])[s.groupby(level=(0,1,2)).cumcount()]
# or
# new_lvl = np.tile(['inter', 'batch'], len(s)//2)

(s.set_index(new_level, append=True)[0]
  .unstack(level=(-2,-1)
  .reset_index()
)
输出:

   cls       measure Pend Job      
                        inter batch
0  ABC  inter, batch      101    93
1  DEF  inter, batch    24279   421

感谢更新,我将检查+1,但是只是为了确认
cls
不在先前看起来的列中,很抱歉编辑了这篇文章。它给出了一个错误,如
KeyError:“['cls']都不在列中”
我没有注意到
cls
是原始数据帧的索引。请参阅更新的答案(唯一的变化是
s
)。
s.groupby(级别=(0,1,2))
而不仅仅是
(0,1)
。见更新。