Сортировка многоиндексных панд по подгруппам, затем по группам с наибольшим значением - PullRequest
0 голосов
/ 01 марта 2019

Я хочу рассказать о сбросе индексов, сортировке значений и установке новых индексов для MultiIndex DataFrames.

Я хочу взять это

df = df.reset_index()
       .sort_values(['col1','col3'], ascending=[True, False])
       .set_index(['col1','col2'])

           col3 
col1 col2       
a    t     2.92
     1     1.67
     2     0.75
     3     0.50 
b    t     4.75
     2     2.25
     3     2.00
     1     0.50 
c    t     7.90
     3     2.75
     1     2.65
     2     2.50

и отсортировать по наибольшему значению отсортированных групп

           col3
col1 col2      
c    t     7.90
     3     2.75
     1     2.65
     2     2.50
b    t     4.75
     2     2.25
     3     2.00
     1     0.50
a    t     2.92
     1     1.67
     2     0.75
     3     0.50

1 Ответ

0 голосов
/ 01 марта 2019

Вы можете сделать это путем временного присвоения ключа сортировки, ключ сортировки создается с помощью groupby level = 0 index или 'col1' затем transform и суммирования:

df.assign(sortkey=df[['col3']].groupby(level=0).transform('sum'))\
  .sort_values(['sortkey','col3'], ascending=[False,False])\
  .drop('sortkey', axis=1)

Вывод:

           col3
col1 col2      
c    t     7.90
     3     2.75
     1     2.65
     2     2.50
b    t     4.75
     2     2.25
     3     2.00
     1     0.50
a    t     2.92
     1     1.67
     2     0.75
     3     0.50
...