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

时间:2019-02-28 15:34:56

标签: python pandas sorting

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

例如,我有 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

可能看起来像这样

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 :(得分:1)

使用帮助列的解决方案:

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