Python 检查表B中的X,Y列对是否在表A中任何X,Y列对的增量距离内
我有一个名为origA的数据帧: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
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