【问题标题】:Pandas MultiIndex change order of one level ONLYPandas MultiIndex 仅一级更改顺序
【发布时间】:2019-07-17 02:34:49
【问题描述】:

我有一个包含多索引列的数据框:

 |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

请帮忙

非常感谢

【问题讨论】:

  • 抱歉搞砸了。应该是 df.sort_index(axis=1, level=1, ascending=False) 而我不喜欢的结果是 b d a c

标签: python pandas dataframe multi-index


【解决方案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

概括地说,您可以访问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

【讨论】:

    【解决方案2】:

    你试过了吗:

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

    ?

    【讨论】:

      【解决方案3】:

      你仍然可以使用sort_index

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

      【讨论】:

      • 虽然这可行,但并不相同。您仍然对第一级进行排序。唯一的一点是,这无关紧要。
      • 我认为这个更清楚地说明了它的意图。非常蟒蛇
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2016-12-01
      • 2015-05-22
      • 2015-08-14
      • 2013-01-22
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多