首页 > 解决方案 > pandas df - 按索引排序,但从排序中排除第一列

问题描述

我想按行对这个 df 进行排序(“坏工作”),但我想从排序中排除第一列,以便它保持在原来的位置:

          Radisson   Marriott   Hilton      IHG     
Category                                        
good job  0.214941   0.40394    0.448931    0.375316
bad  job  0.514941   0.10394    0.348931    0.475316
crap job  0.114941   0.20394    0.548931    0.175316

预期输出:

          Radisson   IHG        Hilton     Marriott   
Category                                        
good job  0.214941   0.375316   0.448931   0.40394
bad  job  0.514941   0.475316   0.348931   0.10394 
crap job  0.114941   0.175316   0.548931   0.20394 

我不知道要编辑下面的代码以从排序中排除第一列:

 df = df.sort_values(by=[df.index[1]], axis=1, ascending=False)

标签: pythonpandasdataframesorting

解决方案


argsort与 add一起使用1可能会为位置添加第一个值0reindex最后更改列的顺序为iloc

s = df.iloc[0]
df = df.iloc[:, ((-s[1:]).argsort() + 1).reindex(df.columns, fill_value=0)]
print (df)
          Radisson    Hilton  Marriott       IHG
Category                                                     
good job  0.214941  0.448931   0.40394  0.375316

推荐阅读