#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)