Сортировка по двум столбцам, по абсолютному значению - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь отсортировать данные по двум столбцам.Один из них по абсолютной стоимости.Можно легко отсортировать значения по двум столбцам http://pandas.pydata.org/pandas-docs/version/0.17/generated/pandas.DataFrame.sort_values.html и по значению abs Сортировать по абсолютному значению для одного столбца, но я не могу объединить оба подхода. Например,

, У меня есть df , который уже упорядочен по abs 'dist', и затем я хочу отсортировать его внутренне, 'взяв'

In[4]:df
Out[4]: 
        q_id  dist  taking
    0   406   6.0    0.17
    1   448   6.0    0.46
    2   449   6.0    0.42
    3   208  -6.0    0.25
    4   244  -7.0    0.12
    5   203   7.0    0.40
    6   614   8.0    0.50
    7   243  -8.0    0.40

, это может выглядеть так

df_sorted
Out[]: 
        q_id  dist  taking
    1   448   6.0    0.46
    2   449   6.0    0.42
    3   208  -6.0    0.25
    0   406   6.0    0.17
    4   244  -7.0    0.12
    5   203   7.0    0.40
    6   614   8.0    0.50
    7   243  -8.0    0.40

Ascending = [True, False] также требуется, но я надеюсь, что это не должно быть проблемой.

Кто-нибудь знает, как отсортировать этот DataFrame?

1 Ответ

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

Решение с вспомогательной колонкой:

df = (df.assign(A=df['dist'].abs())
        .sort_values(['A','taking'],ascending=[True, False])
        .drop('A', 1))
print (df)
   q_id  dist  taking
1   448   6.0    0.46
2   449   6.0    0.42
3   208  -6.0    0.25
0   406   6.0    0.17
5   203   7.0    0.40
4   244  -7.0    0.12
6   614   8.0    0.50
7   243  -8.0    0.40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...