繁体   English   中英

根据特定索引对多索引熊猫数据框进行排序

[英]Sort Multi-index pandas dataframe based on specific indexes

我有以下数据框:

 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'])

您可以使用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  

暂无
暂无

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

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