pandas df - сортировать по индексу, но исключать первый столбец из сортировки - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу отсортировать этот 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 

Я не знаю, как отредактировать мой код ниже, чтобы исключить 1-й столбец из сортировки:

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

1 Ответ

0 голосов
/ 20 февраля 2019

Используйте argsort с добавлением 1 для возможного добавления первого значения 0 на reindex для позиций, порядок последнего изменения столбцов на 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
...