根据特定索引对多索引pandas数据帧进行排序

时间:2016-09-05 08:26:06

标签: python sorting pandas dataframe multi-index

我有以下数据框:

 x                                        y

 a            b            c              a          b          c

 kk  ii  jj   kk  jj  ii   kk  jj  ii    ii  jj kk  jj kk ii   kk ii jj

 1  .1  .01  2   .5  .2  .4   .6  .01  .3   .5  .7  1.  1.  2  .3  .2 .01 .4  

 2  .5  .01  2    3  .1   4   .3  .1  .01  .02  2   1   5  .7 .3   2  4.5  2.

 3  .01  .1  .4   .1 .5  .2    3  .6   1    3  .2   3  .2   1  1  .5  .2   1

我想要的是:

 x                                        y

 a            b            c              a          b          c

 ii  kk  jj   ii  kk  jj   ii  kk  jj    ii  kk  jj  ii  kk  jj   ii  kk  jj

 1  .01  .1  2   .4  .5  .2   .3  .6  .01   .5   1   .7  .3  2  1.   0.01 .2  .4

 2  0.1  .5  2    4   3  .1   .01 .3  .1   .02   1   2   .3  7  5     4.5  2  2

 3  .1  .01 .4   .2  .1  .5    1  3  .6     3    3  .2    1  1  .2    .2  .5  1 

实际上,目的是根据df ['1'] ['x'] ['a']对整个数据帧进行排序。

我得到了新的排序索引,但我不知道如何根据new_idx重新索引df?

df_sort = df.loc['1']['x']['a'].sort_values(axis=0) 

new_idx = df_sort.index    -->    new_idx = (['ii','kk','jj'])

1 个答案:

答案 0 :(得分:2)

您可以使用reindex

df = df.reindex(columns=['ii','kk','jj'], level=2)
print (df)
      x                                                y                      \
      a               b               c                a              b        
     ii    kk   jj   ii   kk   jj    ii   kk    jj    ii   kk   jj   ii   kk   
1  0.01  0.10  2.0  0.4  0.5  0.2  0.30  0.6  0.01  0.50  1.0  0.7  0.3  2.0   
2  0.01  0.50  2.0  4.0  3.0  0.1  0.01  0.3  0.10  0.02  1.0  2.0  0.3  0.7   
3  0.10  0.01  0.4  0.2  0.1  0.5  1.00  3.0  0.60  3.00  3.0  0.2  1.0  1.0   


           c            
    jj    ii   kk   jj  
1  1.0  0.01  0.2  0.4  
2  5.0  4.50  2.0  2.0  
3  0.2  0.20  0.5  1.0