为datafram中的每个点查找最近的点

2024-05-28 20:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个ID、纬度和经度的数据帧:

ID  Latitude   Longitude        coords
A    45.0353    52.5362   (45.0353, 52.5362)
B    24.6374    12.5363   (24.6374, 12.5363)
C    42.3539    21.O530   (42.3539, 21.O530)
D    48.3638    18.3903   (48.3638, 18.3903)

我需要对它们中的每一个,找到最近的一个,距离将是所需数据帧中的第五列。我尝试使用:

^{pr2}$

我只得到了它们的一个距离,但是现在我需要得到它们的len(data['ID'])数值,大约是1500,所以1500*1500,之后我需要取最近的,最小的距离(除了0)。所以,出了点问题,我想不出怎么解决这个问题。在


Tags: 数据id距离datalencoords数值latitude
1条回答
网友
1楼 · 发布于 2024-05-28 20:32:34

您的代码没有显示lista是如何定义的。如果您将lista=[]放在外部for循环的开始处,那么它将为您提供您要查找的1500*1500组值。但是请注意,您不需要定义两次字典,而是可以在同一个字典上迭代两次。此外,您可以在内部循环完成后更新f_dict,而不是在每次迭代中更新它:

dicts = dict(zip(df.ID, df.coords))

f_dict={}
for key, value in dicts.iteritems():
    lista = []
    for k, v in dicts.iteritems():
        lista.append(geopy.distance.vincenty(value, v).km)
    f_dict.update({key:lista})

然后,您必须迭代f_dict以获得所需的最小值。在

但是请注意,计算地理距离可能会很慢,因此您可以尝试忽略重复对。也就是说,如果您已经完成了A和{},那么就不需要计算B和{}的值。以下是避免重复计算并直接返回最小距离字典的代码版本:

^{pr2}$

相关问题 更多 >

    热门问题