Панды MultiIndex меняют порядок ТОЛЬКО на один уровень - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть фрейм данных с многоиндексными столбцами:

 |A    |B
 |1 |2 |1 |2
0|a  b  c  d

Я бы хотел поменять местами первый уровень, чтобы получить:

 |A    |B
 |2 |1 |2 |1
0|b |a |d |c

Но с

df.sort_index(axis=1, level=1)

Я получаю:

 |A|B|A|B
 |1|1|2|2
0|a|c|b|d

Пожалуйста, помогите

Большое спасибо

Ответы [ 3 ]

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

Вы пробовали:

df.loc[:, pd.IndexSlice[:, [2, 1]]]

?

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

Вы все еще можете использовать sort_index

df.sort_index(level=[0,1],ascending=[True,False],axis=1)
   A     B   
   2  1  2  1
0  b  a  d  c
0 голосов
/ 23 февраля 2019

Предполагая, что они имеют одинаковую метку, вы можете использовать reindex с level=1:

df

   A     B   
   1  2  1  2
0  a  b  c  d

df.reindex([2, 1], level=1, axis=1)

   A     B   
   2  1  2  1
0  b  a  d  c

Для обобщения вы можете получить доступ к MultiIndex.levels:

df.reindex(df.columns.levels[1][::-1], level=1, axis=1)

   A     B   
   2  1  2  1
0  b  a  d  c

Если значения второго уровня не одинаковы для всех меток первого уровня, используйте

df.loc[:, ::-1].reindex(df.columns.levels[0], level=0, axis=1)

   A     B   
   2  1  2  1
0  b  a  d  c
...