简体   繁体   English

熊猫MultiIndex更改顺序仅一级

[英]Pandas MultiIndex change order of one level ONLY

I have a dataframe with multiindex columns: 我有一个带有multiindex列的数据框:

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

I would like to swap level one to get: 我想交换一级以获得:

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

But with 但是随着

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

I get: 我得到:

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

Please help 请帮忙

Many thanks 非常感谢

Assuming they have the same label, you can use reindex with level=1 : 假设它们具有相同的标签,则可以将reindexlevel=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

To generalise, you can access MultiIndex.levels : 概括地说,您可以访问MultiIndex.levels

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

   A     B   
   2  1  2  1
0  b  a  d  c

If the second level values are not the same for all first level labels, use 如果所有第一级标签的第二级值都不相同,请使用

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

   A     B   
   2  1  2  1
0  b  a  d  c

Have you tried: 你有没有尝试过:

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

?

You still can using sort_index 您仍然可以使用sort_index

df.sort_index(level=[0,1],ascending=[True,False],axis=1)
   A     B   
   2  1  2  1
0  b  a  d  c

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM