【发布时间】:2017-10-11 23:58:23
【问题描述】:
我有两个数据集,我需要在两个坐标条件之间的距离上连接在一起。我使用Haversines formula 创建了一个函数来计算distance_km,但在需要多长时间时遇到了性能限制。
数据集 1:
building_id | lat | lng
-------------|-------|--------
1 | 32.11 | -71.22
2 | 32.44 | -72.25
3 | 31.75 | -71.36```
数据集 2:
building_id | lat | lng
------------|-------|--------
4 | 31.65 | -73.52
5 | 32.78 | -70.21
6 | 36.15 | -72.49
每个数据集都有超过 10,000 个建筑物,我想将数据集 2 与数据集 1 匹配,但前提是距离以公里为单位的距离小于 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]
【问题讨论】:
-
您有更大的数据集可用于测试吗?
-
您可以尝试 1) 计算与第一个数据集中每个建筑物的最大距离的坐标,然后 2) 根据这些坐标过滤第二个数据集。那么您甚至可能不需要将所有行相互配对。
标签: python for-loop geospatial geo haversine