Python 3.x 按名称重新排列多索引列

Python 3.x 按名称重新排列多索引列,python-3.x,pandas,multi-index,Python 3.x,Pandas,Multi Index,我有一个具有多索引列的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

我有一个具有多索引列的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
我想做的是将包含CP的所有列移动到数据帧的末尾。这样,

    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包含CP的列并将这些列移动到数据帧的末尾?

使用
argsort
尝试使用
获取级别值

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排序?