【问题标题】:Rearrange Multiindex Columns By Name按名称重新排列多索引列
【发布时间】:2021-05-12 12:01:29
【问题描述】:

我有一个包含类似于这种格式的多索引列的 df:

103   103 B  103 C      111           121       93
CPS   CPS    CPS    Conc  MConc   Conc  MConc  CPS
 1     1      1       1    100     4     400    1
 2     3      4       2    200     5     500    2
 3     3      3       3    300     6     600    3

我想做的是将所有包含 CPS 的列移到数据框的末尾。像这样,

    111           121      93   103   103 B  103 C
Conc  MConc   Conc  MConc  CPS  CPS   CPS    CPS
 1    100     4     400    1     1     1      1
 2    200     5     500    2     2     3      4
 3    300     6     600    3     3     3      3

我已尝试对索引进行排序,或者交换级别并进行排序,但这会移动我不想移动的列,并且不会以正确的顺序对它们进行排序。有超过 37 列,所以我不想手动传递列名。

如何选择级别 1 包含 CPS 的列并将这些列移动到数据框的末尾?

【问题讨论】:

    标签: python-3.x pandas multi-index


    【解决方案1】:

    试试argsortget_level_values

    out = df.iloc[:,np.argsort(df.columns.get_level_values(1)=='CPS')]
    Out[425]: 
       111        121       103 103B 103C  93
    0 Conc MConc Conc MConc CPS  CPS  CPS CPS
    1    1   100    4   400   1    1    1   1
    2    2   200    5   500   2    3    4   2
    3    3   300    6   600   3    3    3   3
    

    【讨论】:

    • 好的。但是 df 的前 7 列需要保留为前 7 列,这也会重新排序。这会以某种方式在切片上工作吗?
    • @Gingerhaze 我不确定你需要什么,所以你也需要第一个 lvl 排序?
    猜你喜欢
    • 2014-09-17
    • 2018-10-28
    • 1970-01-01
    • 2017-02-08
    • 2020-08-21
    • 1970-01-01
    • 2014-05-21
    • 2013-04-02
    • 2021-05-19
    相关资源
    最近更新 更多