假设我有两个DataFrame
:XA
和XB
,例如每个都有3行和2列:
import pandas as pd
XA = pd.DataFrame({
'x1': [1, 2, 3],
'x2': [4, 5, 6]
})
XB = pd.DataFrame({
'x1': [8, 7, 6],
'x2': [5, 4, 3]
})
对于XA
中的每个记录,我希望在XB
中找到最近的记录(例如基于欧几里德距离),以及相应的距离。例如,这可能返回一个在id_A
上索引的DataFrame
,并带有id_B
和distance
列
我如何才能最有效地做到这一点
一种方法是计算全距离矩阵,然后
melt
它并使用nsmallest
进行聚合,它返回索引和值:这表明
id_B
2是距离XA
中三条记录最近的记录:然而,由于这涉及到计算全距离矩阵,因此当
XA
和XB
较大时,计算速度会很慢或失败。另一种为每行计算最近值的方法可能会更快修改this answer以避免使用全距离矩阵,您可以在
XA
(nearest_record1()
)中找到每一行最近的记录和距离,然后调用apply
在每一行(nearest_record()
)上遍历它。这在test中将运行时间缩短了约85%这也会返回正确的结果:
相关问题 更多 >
编程相关推荐