python - 计算两个数据帧之间的最小距离

标签 python pandas distance minimum

我喜欢在 DF2 中找到与 DF1 中的项目最接近的项目。

距离为欧式距离。

例如,对于 DF1 中的 A,DF2 中的 F 是壁橱。

>>> DF1
   X  Y name
0  1  2    A
1  3  4    B
2  5  6    C
3  7  8    D
>>> DF2
   X  Y name
0  3  8    E
1  2  4    F
2  1  9    G
3  6  4    H

我的代码是

DF1 = pd.DataFrame({'name' : ['A', 'B', 'C', 'D'],'X' : [1,3,5,7],'Y' : [2,4,6,8]})
DF2 = pd.DataFrame({'name' : ['E', 'F', 'G', 'H'],'X' : [3,2,1,6],'Y' : [8,4,9,4]})


def ndis(row):
    try:
        X,Y=row['X'],row['Y']
        DF2['DIS']=(DF2.X-X)*(DF2.X-X)+(DF2.Y-Y)*(DF2.Y-Y)
        temp=DF2.ix[DF2.DIS.idxmin()]
        return temp[2]  #       print temp[2]
    except:
        pass        


DF1['Z']=DF1.apply(ndis, axis=1)

这很好用,但对于大数据集来说会花费太长时间。

另一个问题是如何找到第二个和第三个衣橱。

最佳答案

方法不止一种,例如可以使用numpy:

>>> xy = ['X', 'Y']
>>> distance_array = numpy.sum((df1[xy].values - df2[xy].values)**2, axis=1)
>>> distance_array.argmin()
1

前 3 个最接近(我想这不是最快的方法,但最简单)

>>> distance_array.argsort()[:3]
array([1, 3, 2])

如果速度是一个问题,运行性能测试。

关于python - 计算两个数据帧之间的最小距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19868136/

相关文章:

python - panda栏修改面临的问题

python - python-在默认程序中打开wav文件(Linux)

python - 在不需要的地方使用递归是不好的做法吗?

python - 按总和日期分组,并用过去日期中的事故填充所有缺失值,直到计数 = 1

python-3.x - Pandas Dataframe 显示具有所需条件的行

c - 如何计算二维矩阵中两点之间的距离

iphone - 如何计算两地之间的距离? iPhone 版 Google map 有可用的服务吗?

ios - Swift 3 中未计算距离

python - stderr(来自 GDAL)未显示在 Python shell 中

Python; urllib 错误 : AttributeError: 'bytes' object has no attribute 'read'