我试图找出每个客户到店铺之间的最小距离。目前,我的数据中有约1500家商店和约670K名客户。我需要计算670K个客户与1500家商店之间的地理距离,并找到每个客户的最小距离。
我已经创建了下面的Haversine函数:
import numpy as np
def haversine_np(lon1, lat1, lon2, lat2):
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2
c = 2 * np.arcsin(np.sqrt(a))
miles = 6367 * c/1.609
return miles
我的数据集如下所示,一个客户数据框(
cst_geo
)和一个店铺数据框(store_geo
)。下面的数字是虚构的,因为我无法分享真实数据的片段:
客户ID | 纬度 | 经度 |
---|---|---|
A123 | 39.342 | -40.800 |
B456 | 38.978 | -41.759 |
C789 | 36.237 | -77.348 |
店铺ID | 纬度 | 经度 |
---|---|---|
S1 | 59.342 | -60.800 |
S2 | 28.978 | -71.759 |
S3 | 56.237 | -87.348 |
deco
,但无法进一步优化。mindist = []
for i in cst_geo.index:
dist = []
for j in store_geo.index:
dist.append(haversine_np(cst_geo.longitude[i], cst_geo.latitude[i],
store_geo.longitude[j], store_geo.latitude[j]))
mindist.append(min(dist))
scipy.pdist()
吗? - Pranav Hosangadi