Как отсортировать сводную таблицу Pandas MultiIndex по определенному столбцу - PullRequest
0 голосов
/ 21 января 2019

Я новичок в Python и пытаюсь поиграть с Pivas Pivot Tables. Я искал и искал, но ни один из ответов не был тем, что я искал. По сути, я пытаюсь отсортировать приведенную ниже сводную таблицу панд

import numpy as np
import pandas as pd

df = pd.DataFrame({

"TIME":["FQ1","FQ2","FQ2","FQ2"],
"NAME":["Robert",'Miranda',"Robert","Robert"],
"TOTAL":[900,42,360,2000],
"TYPE":["Air","Ground","Air","Ground"],
"GROUP":["A","A","A","A"]})

pt = pd.pivot_table(data=df,
               values =["TOTAL"], aggfunc = (np.sum),
               index = ["GROUP","TYPE","NAME"],
               columns = "TIME",
               fill_value=0,
               margins = True)

В основном я надеюсь отсортировать столбцы «Тип» и «Имя» по сумме каждой строки.

Конечной целью в этом случае будет тип «Земля», появляющийся первым перед «Воздухом», а в типе «Земля» я надеюсь, что Роберт появится перед Мирандой, поскольку его сумма выше.

Вот как это выглядит сейчас:

                     TOTAL            
TIME                   FQ1   FQ2   All
GROUP TYPE   NAME                     
A     Air    Robert    900   360  1260
      Ground Miranda     0    42    42
             Robert      0  2000  2000
All                    900  2402  3302

Спасибо всем, кто может помочь !!

1 Ответ

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

Попробуйте, так как заголовок столбца является многоиндексным, вам нужно использовать кортеж для доступа к столбцам:

pt.sort_values(['GROUP','TYPE',('TOTAL','All')], 
               ascending=[True, True, False])

Вывод:

                     TOTAL            
TIME                   FQ1   FQ2   All
GROUP TYPE   NAME                     
A     Air    Robert    900   360  1260
      Ground Robert      0  2000  2000
             Miranda     0    42    42
All                    900  2402  3302
...