Панды Multiindex, сортировать только значения одного уровня - PullRequest
0 голосов
/ 01 февраля 2019

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

MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], ['Number of Visitors', 'Profit']],
       labels=[[2, 2, 5, 5, 8, 8, 11, 11], [0, 1, 0, 1, 0, 1, 0, 1]],
       names=['Month', None])

Я хочу, чтобы прибыль отображалась перед числом посетителей за каждый месяц, поэтому вВ целом я доволен уровнями, какими они есть, но хочу, чтобы метки для второго уровня были [1,0,1,0,1,0,1,0] вместо [0,1,0,1,0, 1,0,1].Как это можно получить?Я пробовал sort_index, но не могу заставить его работать так, как я хочу.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 февраля 2019

Использование reindex на втором уровне:

mux = pd.MultiIndex(levels=[['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
                             'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], 
                            ['Number of Visitors', 'Profit']],
       labels=[[2, 2, 5, 5, 8, 8, 11, 11], [0, 1, 0, 1, 0, 1, 0, 1]],
       names=['Month', None])
print (mux)

df = pd.DataFrame({'A':range(8)}, index=mux)
print (df)
                          A
Month                      
Mar   Number of Visitors  0
      Profit              1
Jun   Number of Visitors  2
      Profit              3
Sep   Number of Visitors  4
      Profit              5
Dec   Number of Visitors  6
      Profit              7

df = df.reindex(['Profit','Number of Visitors'], level=1)
print (df)
                          A
Month                      
Mar   Profit              1
      Number of Visitors  0
Jun   Profit              3
      Number of Visitors  2
Sep   Profit              5
      Number of Visitors  4
Dec   Profit              7
      Number of Visitors  6
...