首页 > 解决方案 > 比较数据框中的值并使用它计算另一个属性

问题描述

我有一个 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 平面中寻找给定半径内点数最多的任意点(或区域)。我的基本意思是我还想查看平面中的位置,这些位置不一定是数据框中的点,但仍在平面的范围内。

标签: pythonpandas

解决方案


有很多用于成对距离计算的工具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了两次,因为我们想要数组中所有点的所有成对距离。


推荐阅读