Сводная таблица, где столбцы имеют многоуровневый индекс - PullRequest
0 голосов
/ 30 января 2019

Кажется, я не могу понять, как повернуть фрейм данных со столбцами с многоуровневым индексом.

Я видел этот связанный пост , но не могу понять, как применить его к моей проблеме.

Если у меня есть df:

df = pd.DataFrame.from_dict({('Mule Creek', 'ATI'): {5: 5.0, 6: 6.0, 7: 7.0, 8: 8.0, 9: 9.0},
 ('Mule Creek', 'ATIMR'): {5: 0.04115419564079352,
  6: 0.04115419564079352,
  7: 0.04115419564079352,
  8: 0.04115419564079352,
  9: 0.04115419564079352},
 ('Saddle Mtn.', 'ATI'): {5: 5.0, 6: 6.0, 7: 7.0, 8: 8.0, 9: 9.0},
 ('Saddle Mtn.', 'ATIMR'): {5: 0.05260285024705004,
  6: 0.05260285024705004,
  7: 0.05260285024705004,
  8: 0.05260285024705004,
  9: 0.05260285024705004},
 ('Calvert Creek', 'ATI'): {5: 5.0, 6: 6.0, 7: 7.0, 8: 8.0, 9: 9.0},
 ('Calvert Creek', 'ATIMR'): {5: 0.0068488368752893354,
  6: 0.0068488368752893354,
  7: 0.0068488368752893354,
  8: 0.0068488368752893354,
  9: 0.0068488368752893354}})

Я хочу создать сводную таблицу, в которой ATI становится индексом, и использовать `aggfunc = 'mean'.

Я пытался:

df= df.unstack(level=-1)
df =df.pivot_table(values=tmp[0],index='level_0',columns='level_1',aggfunc=np.mean)

НоЯ получаю:

KeyError: 1.0

Желаемый результат:

         ATI  ATIMR
5        5.0  0.0335353
6        6.0  0.0335353
7        7.0  0.0335353
8        8.0  0.0335353
9        9.0  0.0335353

1 Ответ

0 голосов
/ 30 января 2019

Это то, что вам нужно?

newdf=df.stack(level=0).mean(level=0)
newdf
Out[886]: 
   ATI     ATIMR
5  5.0  0.033535
6  6.0  0.033535
7  7.0  0.033535
8  8.0  0.033535
9  9.0  0.033535
...