python-3.x - 'abs()' 和 'argsort()' 究竟是如何一起工作的
问题描述
#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()]
解决方案
通过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 语法决定;这是直截了当的。
推荐阅读
- javascript - IONIC 错误 TS2488:类型“对象”必须具有返回迭代器的“[Symbol.iterator]()”方法
- php - 我的自定义设置页面中的数据无法保存
- php - 如何找出 PHP (codeigniter) 网站中的恶意代码并删除这些恶意软件?
- android - Android中的相机权限在被授予后不起作用
- r - 新的 pandoc distrib',丢失了 '>' rmarkdown 语法?(用 bookdown 编织 Word 输出)
- racket - 如何从运行可执行文件中打开 Web 服务器?
- java - 可以在java中使用bucket_script吗?
- jupyter-notebook - 在 jupyter notebook 中访问 Airflow Hooks
- python - 如何将html中的多个导出数据框合并为一个
- angular - 如何使用 ActiveReportJS 在 Angular 代码中添加数据源和数据集