问题很简单,我有两个数据帧:
为此,我尝试了两种方法花费太多时间:
一个有90,000套公寓及其纬度/经度的数据帧
一个有3,000家药店及其纬度/经度的数据帧
为此,我尝试了两种方法花费太多时间:
第一种方法:我创建了一个矩阵,我的公寓在行中,我的药店在列中,在它们之间的交汇处是距离,之后我只需取最小值以获得90,000个值的列向量。
我只用numpy中的双重for循环:
m,n=len(result['latitude']),len(pharma['lat'])
M = np.ones((m,n))
for i in range(m):
for j in range(n):
if (result['Code departement'][i]==pharma['departement'][j]):
M[i,j] =(pharma['lat'][j]-result['latitude'][i])**2+(pharma['lng'][j]-result['longitude'] [i])**2
备注:我知道纬度/经度的公式有误,但公寓位于同一地区,这是一个很好的近似。
第二种方法:我使用了这个主题的解决方案(虽然数据较少,但问题类似)。 https://gis.stackexchange.com/questions/222315/geopandas-find-nearest-point-in-other-dataframe
我使用了GeoPandas和最近的方法:
from shapely.ops import nearest_points
pts3 = pharma.geometry.unary_union
def near(point, pts=pts3):
nearest = pharma.geometry == nearest_points(point, pts)[1]
return pharma[nearest].geometry.get_values()[0]
appart['Nearest'] = appart.apply(lambda row: near(row.geometry), axis=1)
正如我所说的,这两种方法都花费了太多时间,在运行1个小时后,我的电脑/笔记本死机了且失败了。
我的最终问题: 你是否有一个优化的方法可以更快地进行?这是可能的吗?如果已经优化,我将购买另一台电脑,但要寻找哪些标准才能拥有一个能够进行如此快速计算的PC呢?