当前我有一个看起来像
的数据框 PS PSX1 PSX2 PSX3 PSX4
P TEMP Pat P TEMP Pat P TEMP Pat P TEMP Pat
.01 77 IDLE .04 77 IDLE .003 77 IDLE .19 77 IDLE
.03 77 WRITE .1 77 WRITE .011 77 WRITE .28 77 WRITE
.02 77 READ .04 77 READ .004 77 READ .25 77 READ
.03 77 WRITE .04 77 WRITE .010 77 WRITE .39 77 WRITE
.02 77 READ .04 77 READ .195 77 READ .24 77 READ
.01 230 IDLE .04 230 IDLE .003 230 IDLE .19 230 IDLE
.02 230 WRITE .1 230 WRITE .019 230 WRITE .29 230 WRITE
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
最终,数据框中的温度变为302。
我想知道是否有一种方法可以将上面的数据框更改为下面的数据框(它仍应包括PSX3和PSX4,我只是将其缩小了以便于查看)
PS PSX1 PSX2
TEMP 77 230 302 77 230 302
P P P P P P
IDLE .01 .01 .01 .04 .04 .04
WRITE .03 .02 .04 .1 .1 .2
READ .02 .03 .03 .04 .1 .1
WRITE .03 .02 .02 .09 .1 .1
READ .02 .02 .02 .1 .1 .1
我使用这两行代码进行了第一次分组
df1 = df1.assign(newIndex = df1.groupby('PS').cumcount())
df1 = df1.set_index(['newIndex', 'PS']).unstack().swaplevel(0, axis = 1).sort_index(axis = 1, level = 0)
我尝试再次执行此操作,但是在1级时,我似乎无法正常工作。任何帮助将不胜感激,在此先感谢!
答案 0 :(得分:2)
让我们尝试一下:
(df.stack(0)
.set_index(['Pat','TEMP'],append=True)
.unstack([-1,1])
.swaplevel(0,2, axis=1)
.sum(level=1).sort_index(axis=1))
输出:
PSX1 PSX2 PSX3 PSX4
TEMP 77 230 77 230 77 230 77 230
P P P P P P P P
Pat
IDLE 0.01 0.01 0.04 0.04 0.003 0.003 0.19 0.19
WRITE 0.06 0.02 0.14 0.10 0.021 0.019 0.67 0.00
READ 0.04 0.00 0.08 0.00 0.199 0.000 0.49 0.00
WRIT 0.00 0.00 0.00 0.00 0.000 0.000 0.00 0.29