Проблема проста, у меня два DataFrame:
один с 90 000 квартир и их широта / долгота
и один с 3000 аптек и их широта / долгота
И я хочу создать новую переменную для всех своих квартир: «расстояние до ближайшей аптеки».
Для этого я попробовал два метода, которые тратят много времени:
Первый метод: я создал матрицу с моими квартирами в ряду и моими аптеками в столбцах и расстоянием между ними на пересечении, после чего я просто беру минимальное значение матрицы, чтобы получить вектор-столбец 90 000 значение
Я просто использую двойной для с numpy:
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
ps: я знаю, что неправильная формула для широты / долготы, но апартаменты находятся в одном регионе, так что это хорошее приближение
Второй способ: я использую решение из этих тем (у кого такая же проблема, но с меньшим объемом данных) https://gis.stackexchange.com/questions/222315/geopandas-find-nearest-point-in-other-dataframe
Я использовал геопанды и ближайший метод:
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 часа работы мой компьютер / ноутбук вышел из строя и вышел из строя.
Мой последний вопрос: есть ли у вас оптимизированный способ ускорить работу? возможно ? Если он уже оптимизирован, я куплю другой компьютер, но по каким критериям, но по каким критериям искать, чтобы компьютер мог выполнять такие быстрые вычисления?