Как создать мультииндекс внутри мультииндекса, возможно ли вообще это сделать? - PullRequest
0 голосов
/ 27 июня 2018

В настоящее время у меня есть фрейм данных, который выглядит как

 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    

Я сделал первую группировку, используя эти 2 строки кода

 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, и я не могу заставить его работать. Любая помощь будет оценена, спасибо заранее!

1 Ответ

0 голосов
/ 27 июня 2018

Давайте попробуем:

(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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...