我的左数据帧有超过一百万个经/纬度观测值。我还有另一个43191个邮政编码的数据框(右侧),其中有一个中央纬度/经度。
我的目标是对整个邮政编码数据帧运行一百万纬度/长的每一行,获取每个观测值的距离,然后返回与该最小距离点对应的最小距离邮政编码。我想采用循环方法,因为有太多数据无法进行笛卡尔联接。
我知道这可能是一个冗长的操作,但我只需要执行一次。我只是试图以一种不需要几天并且不会给我带来内存错误的方式进行操作。
包含经纬度邮政编码的数据库位于此处:
https://public.opendatasoft.com/explore/dataset/us-zip-code-latitude-and-longitude/export/
我试图在笛卡尔设置中将左表与右表连接起来,但这会创建500亿行,因此行不通。
一些虚拟数据:
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行,计算每个距离并取结果集的最小值(可能是某种形式的列表),然后返回新列中的相应邮政编码。
我有点迷茫,因为我通常只用笛卡尔联接来完成此操作并一次性计算所有内容,但是我的数据量太大。