По существу,
sort_index
с axis=1
сортирует заголовки столбцов, и этот порядок затем используется для установки порядка столбцов.
И , следствие,
sort_index
с axis=0
сортирует индекс, и этот порядок затем используется для установки порядка строк.
Вот как выглядит ваш ввод df
:
Три верхние «строки» на рисунке выше соответствуют столбцу pandas MultiIndex из df
, который выглядит следующим образом:
df.columns
MultiIndex([('Amount', '2019-06-01', 1),
('Amount', '2019-06-01', 2),
('Amount', '2019-07-01', 1),
('Amount', '2019-07-01', 2),
( 'type', '2019-06-01', 1),
( 'type', '2019-06-01', 2),
( 'type', '2019-07-01', 1),
( 'type', '2019-07-01', 2)])
Давайте представим, что ваш трехуровневый столбец multiIndex волшебным образом преобразуется в DataFrame, каждый уровень которого имеет свой собственный столбец с именем cdf
:
cdf
level_0 level_1 level_2
(1) Amount 2019-06-01 1
(2) Amount 2019-06-01 2
(3) Amount 2019-07-01 1
(4) Amount 2019-07-01 2
(5) type 2019-06-01 1
(6) type 2019-06-01 2
(7) type 2019-07-01 1
(8) type 2019-07-01 2
Номера строк здесь соответствуют идентификаторам столбцов в исходном кадре данных. Давайте посмотрим, что происходит, когда мы сортируем cdf
по последним двум столбцам:
cdf.sort_values(['level_1', 'level_2'])
level_0 level_1 level_2
(1) Amount 2019-06-01 1
(5) type 2019-06-01 1
(2) Amount 2019-06-01 2
(6) type 2019-06-01 2
(3) Amount 2019-07-01 1
(7) type 2019-07-01 1
(4) Amount 2019-07-01 2
(8) type 2019-07-01 2
Обратите внимание на индекс отсортированного cdf
:
(1) (5) (2) (6) (3) (7) (4) (8)
Теперь давайте посмотрим, что произойдет, когда мы применяем операцию sort_index
к df
:
df.sort_index(level=[1, 2], axis=1)
Эллипсы в центре указывают, что не все столбцы могут отображаться из-за на ширину терминала (на самом деле столбцы (6) и (3) не отображаются, но их там очень много), но это не самая интересная часть. Сравните здесь порядок столбцов с порядком строк cdf
, вы увидите, что они идентичны.