Python 检查表B中的X,Y列对是否在表A中任何X,Y列对的增量距离内

Python 检查表B中的X,Y列对是否在表A中任何X,Y列对的增量距离内,python,pandas,Python,Pandas,我有一个名为origA的数据帧: X, Y 10, 20 11, 2 9, 35 8, 7 另一个名为calcB: Xc, Yc 1, 7 9, 22 我想检查calcB中的每个Xc,Yc对,如果origA中有一个X,Y对,它与Xc,Yc的欧氏距离小于delta,如果是,将True放在origA中检测到的新列的相应行中可以使用scipy import scipy delta=5 ary = scipy.spatial.distance.cdist(dfa, dfb, metric='eucl

我有一个名为origA的数据帧:

X, Y
10, 20
11, 2
9, 35
8, 7
另一个名为
calcB

Xc, Yc
1, 7
9, 22

我想检查
calcB
中的每个
Xc,Yc
对,如果
origA
中有一个
X,Y
对,它与
Xc,Yc
的欧氏距离小于
delta
,如果是,将
True
放在
origA
中检测到的
新列的相应行中
可以使用
scipy

import scipy
delta=5
ary = scipy.spatial.distance.cdist(dfa, dfb, metric='euclidean')
ary
Out[189]: 
array([[15.8113883 ,  2.23606798],
       [11.18033989, 20.09975124],
       [29.12043956, 13.        ],
       [ 7.        , 15.03329638]])
dfa['detected']=(ary<delta).any(1)
dfa
Out[191]: 
    X   Y  detected
0  10  20      False
1  11   2      True
2   9  35      True
3   8   7      False
导入scipy
δ=5
ary=scipy.space.distance.cdist(dfa,dfb,metric='euclidean')
阿利
出[189]:
数组([[15.8113883,2.23606798],
[11.18033989, 20.09975124],
[29.12043956, 13.        ],
[ 7.        , 15.03329638]])

dfa['detected']=(ary@Wen Ben的解决方案可能适用于小数据集。但是,当您尝试计算多个点的距离时,您很快就会遇到性能问题。因此,已经有很多智能算法可以减少所需的距离计算量-其中之一是BallTree(由scikit learn提供):

输出

    X   Y   Detected
0   10  20  True
1   11  2   False
2   9   35  False
3   8   7   False

我不能复制这个例子,我的检测列给出了所有行的<代码>真< /代码>。还有,代码中的<代码> AR>>20 <代码>的含义是什么?假设我希望最小距离<代码> delta=5代码>代码>考虑源代码。@ JBSSM然后将20改为5No,这不起作用,代码应该被更改为<代码> DFA [检测到] =(我自己编辑的,它必须是
any(1)
而不是
any()
我接受这个答案,因为它确实快得多。
    X   Y   Detected
0   10  20  True
1   11  2   False
2   9   35  False
3   8   7   False