我正在尝试在abs(C)上对该数据框进行排序
A B C
0 10.3 11.3 -0.72
1 16.2 10.9 -0.84
2 18.1 15.2 0.64
3 12.2 11.3 0.31
4 17.2 12.2 -0.75
5 11.6 15.4 -0.08
6 16.0 10.4 0.05
7 18.8 14.7 -0.61
8 12.6 16.3 0.85
9 11.6 10.8 0.93
为此,我必须添加一个新列D = abs(C),然后对D进行排序
df['D']= abs (df['C'])
df.sort_values(by=['D'])
有一种方法可以用一种方法完成这项工作吗?
答案 0 :(得分:3)
使用Series.argsort
将Series.abs
用于绝对值的位置,然后将DataFrame.iloc
更改为行的顺序:
df2 = df.iloc[df.C.abs().argsort()]
print (df2)
A B C
6 16.0 10.4 0.05
5 11.6 15.4 -0.08
3 12.2 11.3 0.31
7 18.8 14.7 -0.61
2 18.1 15.2 0.64
0 10.3 11.3 -0.72
4 17.2 12.2 -0.75
1 16.2 10.9 -0.84
8 12.6 16.3 0.85
9 11.6 10.8 0.93
答案 1 :(得分:1)
(来自my answer in another post :)
在sort_values
function中使用参数key
:
import pandas as pd
ttt = pd.DataFrame({'a': ['a', 'b', 'c', 'd', 'e', 'f'], 'b': [-3, -2, -1, 0, 1, 2]})
ttt.sort_values(by='b', key=abs)
将产生:
a b
3 d 0
2 c -1
4 e 1
1 b -2
5 f 2
0 a -3
答案 2 :(得分:0)
import pandas as pd
ttt = pd.DataFrame({'a': ['a', 'b', 'c', 'd', 'e', 'f'], 'b': [-3, -2, -1, 0, 1, 2]})
# ascending order
ttt_as = ttt.iloc[ttt.b.abs().argsort()]
print (ttt_as)
# descending order
ttt_des = ttt.iloc[ttt.b.abs().argsort()][::-1]
print (ttt_des)