Python 在坐标之间最近的距离上连接两个数据帧
我有两个数据集,我需要在两个坐标之间的距离上连接在一起。我创建了一个用于计算距离(km)的函数,但在计算过程中遇到了性能限制 数据集1:Python 在坐标之间最近的距离上连接两个数据帧,python,for-loop,geospatial,geo,haversine,Python,For Loop,Geospatial,Geo,Haversine,我有两个数据集,我需要在两个坐标之间的距离上连接在一起。我创建了一个用于计算距离(km)的函数,但在计算过程中遇到了性能限制 数据集1: building_id | lat | lng -------------|-------|-------- 1 | 32.11 | -71.22 2 | 32.44 | -72.25 3 | 31.75 | -71.36``` building_id | lat | lng -
building_id | lat | lng
-------------|-------|--------
1 | 32.11 | -71.22
2 | 32.44 | -72.25
3 | 31.75 | -71.36```
building_id | lat | lng
------------|-------|--------
4 | 31.65 | -73.52
5 | 32.78 | -70.21
6 | 36.15 | -72.49
数据集2:
building_id | lat | lng
-------------|-------|--------
1 | 32.11 | -71.22
2 | 32.44 | -72.25
3 | 31.75 | -71.36```
building_id | lat | lng
------------|-------|--------
4 | 31.65 | -73.52
5 | 32.78 | -70.21
6 | 36.15 | -72.49
每个数据集中有10000多座建筑物,我想将数据集2与数据集1进行匹配,但仅当距离(以km为单位)小于0.0075时
我目前正在遍历数据集1的每一行,并从数据集2中查找所有lat lng组合,以确定最小距离
dataset_2_latlng_dict = dict(zip(dataset_2.lng,dataset_2.lat))
for index, row in dataset_1.iterrows():
lat = row['lat']
lng = row['lng']
all_dist = []
final_list = []
for key, value in dataset_2_latlng_dict.iteritems():
distance = utils.distance_km(key,value,lng,lat)
all_dist.extend([distance])
final_list = sorted(all_dist, key=float)
dataset_1['min_distance'] = final_list[0]
您没有向提供任何数据,因此我将此答案保留为描述性的 正如您所期望的,没有理由计算到每个其他建筑的距离。7.5米规格意味着lat和longs将非常接近于直接匹配彼此相邻的任何建筑物 纬度线之间的距离从赤道的110.6公里到两极的111.7公里不等。如果我们加上一些误差和四舍五入来简化分析,那么我们可以使用每度100公里的估计值。这意味着0.0075km的最大距离变为0.000075度的最大纬度。因此,任何符合0.0075km距离标准的建筑也必然符合0.000075度纬度标准。如果将计算限制在纬度0.000075度以内的建筑物上,则只需对较小的建筑物子集进行计算
因此,您只需按纬度对位置列表进行排序,然后遍历列表,仅比较纬度在0.000075度(7.5米)以内的建筑物的距离另一个列表中的建筑的最大距离。您是否有更大的数据集可用于测试?您可以尝试1)计算第一个数据集中与每个建筑的最大距离的坐标,然后2)根据这些坐标过滤第二个数据集。然后,您甚至可能不需要将所有行相互配对。