跨两列排序,其中一列按绝对值排序

Ana*_*vko 2 python sorting pandas

我正在尝试按两列对数据进行排序。其中之一是绝对值。按两列http://pandas.pydata.org/pandas-docs/version/0.17/ generated/pandas.DataFrame.sort_values.html 和按绝对值对值进行排序很容易 按绝对值排序按一列的绝对值排序,但我无法合并这两种方法。

例如,我有df已经按 abs 'dist' 排序,然后我想通过 'take' 在内部对其进行排序

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
Run Code Online (Sandbox Code Playgroud)

它可能看起来像这样

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
Run Code Online (Sandbox Code Playgroud)

Ascending=[True, False] 也是必需的,但我希望这不会成为问题。

有谁知道如何对该 DataFrame 进行排序?

jez*_*ael 5

带辅助列的解决方案:

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
Run Code Online (Sandbox Code Playgroud)