Как изменить порядок многоиндексных столбцов с помощью Pandas? - PullRequest
0 голосов
/ 27 августа 2018

Таблица показана здесь

код:

dff = pd.DataFrame({'Country':['France']*4+['China']*4,
                   'Progress':['Develop','Middle','Operate','Start']*2,
                   'NumTrans':np.random.randint(100,900,8),
                   'TransValue':np.random.randint(10000,9999999,8)})

dff = dff.set_index(['Country','Progress']).T

Данные и код указаны выше.

Я хочу знать, есть ли способ переупорядочить "Progress" как start-development-middle-эксплуатации с использованием Python.

Я пытался использовать функцию карты и установить каждую стадию с номером, но не могу извлечь "Прогресс" из мультииндекса

Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

reindex

Вы можете указать уровень для переиндексации на

cats = ['Start', 'Develop', 'Middle', 'Operate']
dff.reindex(cats, axis=1, level=1)

Country      France                              China                         
Progress      Start  Develop   Middle  Operate   Start Develop  Middle  Operate
NumTrans        772      832      494      793     750     722     818      684
TransValue  7363187  2578816  9764430  4863178  159777  840700  978816  9674337

set_levels с CategoricalIndex

Вы можете определить порядок второго уровня, а затем отсортировать.

lvl1 = dff.columns.levels[1]
cats = ['Start', 'Develop', 'Middle', 'Operate']
cati = pd.CategoricalIndex(
  lvl1,
  categories=cats,
  ordered=True
)
dff.columns.set_levels(
  cati, level=1, inplace=True  
)

dff.sort_index(1)

Country      China                            France                           
Progress     Start Develop  Middle  Operate    Start  Develop   Middle  Operate
NumTrans       750     722     818      684      772      832      494      793
TransValue  159777  840700  978816  9674337  7363187  2578816  9764430  4863178
...