【问题标题】:How to create a multiindex inside of a multiindex, is it even possible to do so?如何在多索引中创建多索引,甚至可以这样做吗?
【发布时间】:2018-12-06 13:09:43
【问题描述】:

目前我有一个看起来像的数据框

 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 级时,我似乎无法使其正常工作。任何帮助将不胜感激,在此先感谢!

【问题讨论】:

  • 对预期结果不是很清楚。您能否将其限制为两个只有三个完整的列记录,并显示您对这三个完整列的预期输出?
  • @ScottBoston 我编辑了输出表,这样更有用吗?

标签: python python-2.7 pandas pandas-groupby


【解决方案1】:

让我们试试吧:

(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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2021-08-17
    • 2023-03-23
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多