我正在尝试按两列对数据进行排序。其中之一是绝对值。按两列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进行排序吗?
答案 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