python - 比较数据框中的值并使用它计算另一个属性
问题描述
我有一个 pd 数据框,它在 XY 平面上有很多平面。数据框由点的 x 和 y 坐标组成。我想使用勾股定理检查每个点到所有其他点的距离,并计算该点一定距离内的点数。
def distance(x1, y1, x2, y2):
return math.sqrt((x1 - x2)**2 + (y1 - y2)**2)
df = pd.DataFrame({'X':[random.randint(1,100) for i in range(100)], 'Y':[random.randint(1,100) for i in range(100)]})
我意识到我可以遍历数据框,但这不是最佳做法,而且需要的时间太长。有没有办法可以优化这个过程。
最终,我希望数据框中的另一列存储数据框中每个点一定距离内的点数。
编辑:我想做的另一件事是在 XY 平面中寻找给定半径内点数最多的任意点(或区域)。我的基本意思是我还想查看平面中的位置,这些位置不一定是数据框中的点,但仍在平面的范围内。
解决方案
有很多用于成对距离计算的工具SciPy
:在此处输入链接描述
最简单的使用方法是distance_matrix
计算成对距离并将其作为矩阵返回。首先,您需要将数据框转换为格式正确的 numpy 数组:
import random
from scipy.spatial import distance_matrix
import pandas as pd
import numpy as np
df = pd.DataFrame({'X':[random.randint(1,100) for i in range(100)], 'Y': random.randint(1,100) for i in range(100)]})
foo = np.array([(x,y) for x, y in zip(df.X, df.Y)])
baz = distance_matrix(foo, foo)
这里我们使用foo
了两次,因为我们想要数组中所有点的所有成对距离。
推荐阅读
- lua - 在while循环期间的ComputerCraft Catch函数
- vba - 以编程方式更新-链接-命名范围-的-excel-object-in-ms-word-2010
- macos - 在 Mac 中禁用符号链接和挂载路径解析
- windows - 为什么 PDF 文本提取会挂起单个 PDF 但通过 RDP 工作
- python - 在熊猫数据框中设置多索引列的顺序
- c - How to sync two process (child and parent) with signals in C?
- ubuntu - How to get complete history from different tty or pts
- python - How to handle temporary errors which are not signaled by http status code?
- ios - Objective c iOS 11中的静默通知显示横幅错误
- android - 需要重新启动应用程序才能显示更改?