使用 pandas 按绝对值对列进行排序

JJJ*_*ohn 6 pandas

我正在尝试在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
Run Code Online (Sandbox Code Playgroud)

为此,我必须附加一个新列 D = abs(C),然后对 D 进行排序

df['D']= abs (df['C'])
df.sort_values(by=['D'])
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以用一种方法完成这项工作?

jez*_*ael 5

用于Series.argsort绝对值的位置 by Series.abs,然后更改行的顺序 by 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
Run Code Online (Sandbox Code Playgroud)


Luc*_*pkn 5

(从我在另一篇文章中的回答:)

Pandas 的完美简单解决方案 > V_1.1.0:

函数中使用参数keysort_values

import pandas as pd
df = pd.DataFrame({'a': ['a', 'b', 'c', 'd', 'e', 'f'], 'b': [-3, -2, -1, 0, 1, 2]})

df.sort_values(by='b', key=abs)
Run Code Online (Sandbox Code Playgroud)

将产生:

    a   b
3   d   0
2   c   -1
4   e   1
1   b   -2
5   f   2
0   a   -3
Run Code Online (Sandbox Code Playgroud)