#Creating DataFrame
df=pd.DataFrame({'AAA' : [4,5,6,7], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50]}); df
输出:
AAA BBB CCC
0 4 10 100
1 5 20 50
2 6 30 -30
3 7 40 -50
aValue = 43.0
df.loc[(df.CCC-aValue).abs().argsort()]
输出:
AAA BBB CCC
1 5 20 50
0 4 10 100
2 6 30 -30
3 7 40 -50
输出混乱,请您详细说明下一行 有效
df.loc[(df.CCC-aValue).abs().argsort()]
答案 0 :(得分:2)
abs
会翻转负值,并且相减的值会左右移动,因此很难想象发生了什么。相反,我需要逐步进行计算:
In [97]: x = np.array([100,50,-30,-50])
In [98]: x-43
Out[98]: array([ 57, 7, -73, -93])
In [99]: abs(x-43)
Out[99]: array([57, 7, 73, 93])
In [100]: np.argsort(abs(x-43))
Out[100]: array([1, 0, 2, 3])
In [101]: x[np.argsort(abs(x-43))]
Out[101]: array([ 50, 100, -30, -50])
argsort
是将元素排序的索引。我们可以看到:
In [104]: Out[99][Out[100]]
Out[104]: array([ 7, 57, 73, 93])
或
In [105]: np.array([57, 7, 73, 93])[[1, 0, 2, 3]]
Out[105]: array([ 7, 57, 73, 93])
How they work together
由Python语法确定;很简单。
答案 1 :(得分:1)
(df.CCC-aValue).abs()
将采用df.CCC-aValue
的绝对值,而argsort
将对值进行排序并采用已排序的索引,而df.loc
将显示具有已排序索引的行