У меня есть левый фрейм данных более 1 миллиона лат / длинных наблюдений. У меня есть еще один фрейм данных (справа) из 43191 почтовых индексов с центральным лат / долг.
Моя цель - провести каждую строку по 1 миллиону широты / длине по всему фрейму данных почтового индекса, взять расстояние каждого наблюдения, а затем вернуть соответствующий почтовый индекс минимального расстояния, соответствующий этой точке минимального расстояния. Я хочу использовать циклический подход, так как данных слишком много, чтобы выполнить декартово соединение.
Я понимаю, что это, вероятно, будет длительной операцией, но мне нужно сделать это только один раз. Я просто пытаюсь сделать это так, чтобы это не занимало дней и не дало мне ошибки памяти.
База данных с лат / длинным почтовым индексом находится здесь:
https://public.opendatasoft.com/explore/dataset/us-zip-code-latitude-and-longitude/export/
Я попытался объединить левую таблицу с правой в декартовой среде, но это создает более 50 миллиардов строк, поэтому это не сработает.
Некоторые фиктивные данные:
import geopy.distance as gd
import pandas as pd
import os
import numpy as np
df = pd.DataFrame(np.array([[42.801104,-76.827879],[38.187102,-83.433917],
[35.973115,-83.955932]]), columns = ['Lat', 'Long'])
for index, row in df.iterrows():
gd.vincenty((row['Lat'], row['Long']))
Моя цель состоит в том, чтобы создать цикл так, чтобы одна строка в левом кадре пронизывала 43000 строк в правом кадре, вычисляла каждое расстояние и брала минимум этого набора результатов (возможно, какой-то список), а затем возвращала соответствующий почтовый индекс в новом столбце.
Я немного растерялся, так как обычно я делал бы это с помощью декартового объединения и вычислял все за один раз, но у меня слишком много данных для этого.