Сортировка фрейма данных по абсолютному значению без изменения значения или добавления столбца

#python #dataframe #sorting

#python #фрейм данных #сортировка

Вопрос:

У меня есть фрейм данных, который является результатом импорта csv, а затем выполнения нескольких операций и добавления столбца, который является разницей между двумя другими столбцами (скажем, столбец 10 — столбец 9). Я пытаюсь отсортировать фрейм данных по абсолютному значению этого разностного столбца, не изменяя его значения и не добавляя другой столбец.

Я видел этот синтаксис снова и снова по всему Интернету, с указанием того, что он прошел успешно (принятые ответы, комментарии со словами «спасибо, это сработало» и т. Д.). Однако я получаю ошибку, которую вы видите ниже:

 df.sort_values(by='Difference', ascending=False, inplace=True, key=abs)
 

Ошибка:

 TypeError: sort_values() got an unexpected keyword argument 'key'
 

Я не уверен, почему синтаксис, который я вижу, работает для других людей, не работает для меня. У меня гораздо больше работы с кодом и другими фреймами данных, так что я не думаю, что это проблема с импортом pandas.

Я перешел и просто создал новый столбец, который является абсолютным значением столбца разницы, и отсортировал по нему, и исключил этот столбец из моего экспорта на рабочий лист, но я действительно хотел бы знать, как заставить его работать по-другому. Любая помощь приветствуется.

Я использую Python 3

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

1. Попробуйте удалить ключевую часть.

2. В этой версии появляется ключ: pandas.pydata.org/pandas-docs/stable/reference/api /…

3. Ну, мне нужно отсортировать по абсолютному значению, и я видел из других сообщений в Интернете, что это был способ сделать это, используя sort_values для фрейма данных. Как выполнить сортировку по абсолютному значению столбца без изменения его значений или добавления другого столбца для сортировки? Возможно ли это?

4. Я просмотрел этот документ, пытаясь устранить неполадки, я не вижу, как что-либо четко указывает, в чем проблема с моим синтаксисом. Я вижу ссылку на ключ, принимающий серию, но я видел приведенную выше строку с key =abs, опубликованную в качестве решения в нескольких местах. Как я могу отсортировать фрейм данных по абсолютному значению столбца без изменения значений в этом столбце и без создания нового столбца для сортировки?

Ответ №1:

введите описание изображения здесь

df.loc[(df.c - df.b).sort_values(ascending = False).index] Сортировка по разнице между «c» и «b», без создания нового столбца. Я надеюсь, что это то, что вы искали.

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

1. Спасибо, P-DOX, но когда я печатаю этот df как до, так и после сортировки, я получаю тот же порядок, независимо от того, на что я меняю числа. Кроме того, я не думаю, что даже если бы это сработало, оно сортировалось бы по АБСОЛЮТНОМУ ЗНАЧЕНИЮ разницы. У меня уже есть столбец различий, мне не нужно сортировать без создания столбца РАЗЛИЧИЙ, мне просто нужно отсортировать фрейм данных (по убыванию) по АБСОЛЮТНОМУ ЗНАЧЕНИЮ столбца РАЗЛИЧИЙ. Итак, -100 должно быть до 90 (абсолютное значение -100 равно 100).

2. df.loc[abs(df.c — df.b).sort_values(по возрастанию = False).index]…. это то, что делает этот запрос, без создания дополнительного столбца, в котором хранится разница df.c и df.b, мы можем сортировать. используйте abs() для вычисления абсолютной разницы. Надеюсь, это сработает.

3. df = df.loc[abs(df.c — df.b).sort_values(по возрастанию = False).index]

4. Черт возьми, это сделало именно то, что я искал, хотя оно более надежное, чем мне нужно (у меня есть столбец различий, и мне нужно сортировать по абсолютному значению, мне не нужно вычислять разницу и сортировать, не создавая ни того, ни другого. Я почти уверен, что смогу выполнить эту работу (хотя иногда мне трудно сделать проще, чем было предоставлено). Напомним, это сортирует по абсолютному значению разницы между c и b, не создавая НИ столбца различий, НИ абсолютного значения столбца различий: df = df.loc[abs(df.c — df.b).sort_values(по возрастанию = False).index] Спасибо!

Ответ №2:

  • ключ является необязательным аргументом
  • Он принимает ряд в качестве входных данных, возможно, вы работали с фреймом данных.

проверьте это

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

1. Я работаю с фреймом данных, да. Я пытаюсь отсортировать фрейм данных по абсолютному значению одного столбца без изменения значений этого столбца или добавления другого столбца, который является абсолютным значением, а затем сортировки по нему. Разве это невозможно с фреймами данных? Строка кода, которую я включил, — это та, которую я рассматриваю как принятый ответ в других сообщениях, но я получаю эту ключевую ошибку