python-3.x - 如何根据特定条件将普通数据框转换为多索引

标签 python-3.x pandas multi-index

过了很长一段时间,我访问了 SO 的 pandas 部分,并得到了一个问题,这个问题确实没有很好地框架,因此我想以明确的方式放在这里,因为我也有类似的情况:-)

下面是数据框结构:

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

说我希望我的 dataFrame 进入 MultiIndex Dataframe,其中 Pend JobRun JobTime 位于顶部,如上所示。

编辑:

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

关于python-3.x - 如何根据特定条件将普通数据框转换为多索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231396/

相关文章:

Python MD4 函数无法像在线 MD4 哈希生成器一样生成哈希代码

python - 如何使用 apply 函数和 lambda 函数将列表的值添加到列值?

python - 使用破折号上传组件上传csv文件并生成图表

python - 转换多索引数据帧以保留 groupby() 聚合

python-3.x - 如何在 Windows 上执行 python 的 Ansible 模块?

python-3.x - Scipy 找到方程组的一组非负根

python - 在多索引 Pandas Dataframe 中设置值的正确方法

python - 在 MultiIndex 上使用 df.query 给出 UndefinedVariableError

python - 如何进行时间序列向后重采样,例如从最后数据日期开始的 5 个工作日?

python - 如何解决传递依赖冲突问题?