gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:13:04 25 4
gpt4 key购买 nike

很长一段时间后,我访问了 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 |
----------------------------------------------------------------------------------
说我希望我的数据帧变成多索引数据帧,其中 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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com