Метод Pandas sort_values не сортирует фрейм данных Pandas

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь отсортировать фрейм данных, но sort_values метод, похоже, не работает. Я проверил другие сообщения stackoverflow по той же проблеме, но они, похоже, мне не помогают.

Code.py

     var_df = pd.DataFrame(columns=['Variable','Remaining values','Degrees'])
    var_df.loc[0] = ['V1', 1, 2]
    var_df.loc[1] = ['V2', 2, 3]
    var_df.loc[2] = ['V3', 2, 1]
    var_df.loc[3] = ['V4', 4, 5]
    var_df.loc[4] = ['V5', 5, 4]
    var_df.loc[5] = ['V6', 5, 7]
    var_df.loc[6] = ['V7', 6, 1]
    
    print(var_df)
    print('n------------n')
    
    new_var_df = var_df.sort_values(by=['Remaining values', 'Degrees'], inplace=True, ascending=[True, False])
    new_var_df = var_df.reset_index(drop=True)
    print(new_var_df)
  

Когда я распечатываю var_df , и new_var_df они имеют одинаковый результат:

    Variable Remaining values Degrees
0       V1                1       2
1       V2                2       3
2       V3                2       1
3       V4                4       5
4       V6                5       7
5       V5                5       4
6       V7                6       1
  

Это результат, который я ожидаю после сортировки

Ожидаемый результат после сортировки

Комментарии:

1. Я не уверен, что это опечатка или тот же код, который вы используете, но вы создаете new_var_df путем сортировки var_df, а затем перезаписываете new_var_df путем сброса индекса в var_df, поэтому вы получаете тот же фрейм данных. Разве это не должно быть new_var_df=new_var_df.reset_index(drop=True)?

2. @Yashar, большое спасибо. Это была проблема. Я сбрасывал индекс неправильного фрейма данных (var_df)

Ответ №1:

Назначьте, тогда вам не нужно inplace

 new_var_df = var_df.sort_values(by=['Remaining values', 'Degrees'], ascending=[True, False])
  

Комментарии:

1. @David. B посмотрите на свой исходный df, он уже упорядочен по by=[‘Оставшиеся значения’, ‘Градусы’], по возрастанию=[True, False]

2. Я не знаю, делает ли он это уже. пожалуйста, проверьте вопрос. я добавил вывод, который я на самом деле ищу

3. @David. B проверьте ожидаемый результат и сравните его с исходным df, все тот же

Ответ №2:

Спасибо @Yashar.

Проблема была вызвана опечаткой с моей стороны. Я сбрасывал индекс неправильного фрейма данных ( var_df ) вместо new_var_df .

Я решил это, изменив это new_var_df = var_df.reset_index(drop=True) на

new_var_df = new_var_df.reset_index(drop=True)