请考虑以下代码:
avgDists = np.array([1, 8, 6, 9, 4])
ids = avgDists.argsort()[:n]
Run Code Online (Sandbox Code Playgroud)
这给了我n最小元素的索引.是否可以argsort按降序使用它来获得n最高元素的索引?
我正在寻找一种简单的方法来按特定列的绝对值对pandas数据帧进行排序,但不会实际更改数据帧中的值.类似的东西sorted(df, key=abs).所以,如果我有一个数据帧,如:
a b
0 1 -3
1 2 5
2 3 -1
3 4 2
4 5 -9
Run Code Online (Sandbox Code Playgroud)
在"b"上排序时得到的排序数据如下所示:
a b
2 3 -1
3 4 2
0 1 -3
1 2 5
4 5 -9
Run Code Online (Sandbox Code Playgroud) 鉴于:
from pandas import DataFrame
import pandas as pd
d = {'one':[2,3,1,4,5],
'two':[5,4,3,2,1],
'letter':['a','a','b','b','c']}
df = DataFrame(d)
Run Code Online (Sandbox Code Playgroud)
df然后看起来像这样:
df:
letter one two
0 a 2 5
1 a 3 4
2 b 1 3
3 b 4 2
4 c 5 1
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西:
f = lambda x,y: x**2 + y**2
test = df.sort(f('one', 'two'))
Run Code Online (Sandbox Code Playgroud)
这应该按照"一"和"二"列的平方值之和对整个数据帧进行排序,并给我:
test:
letter one two
2 b 1 3
3 b 4 2
1 a 3 4
4 c 5 1
0 a …Run Code Online (Sandbox Code Playgroud)