Geopy 从两个数据帧计算测地距离

Geopy calculate geodesic distance from two dataframes

我正在尝试使用 Geopy 从两个不同的 dfs 计算测地线距离。

我想从 df1(纬度、经度坐标的元组)中为函数提供一个点,并让它计算 df2 中与该点的距离的新列。然后我希望它达到 return 最低值。

到目前为止,这是我所拥有的:

df1 和 df2 都包含一个名为 [lat_lon] 的列,它是一个坐标元组。

from geopy.distance import geodesic

def get_distance(point, df2): 
    df2['dist'] = df2.apply(geodesic(point, df2['lat_lon']).miles)
    closest = df2.loc[df2['dist'].idxmin()]
    return closest

然后我想将其应用于 df1,以便创建一个具有最接近值的新列。

df1['closest_location'] = df1['lat_lon'].apply(lambda x: get_distance(x, df2))

我在 运行 最后一行出现此错误:

ValueError: When creating a Point from sequence, it must not have more than 3 items.

我想我在这里迷失了 lambdas。

您将整个 df2 传递给 geodesic,但它只需要单个元组作为输入。要解决它,您还可以在函数中包含一个 lambda:

def get_distance(point, df2): 
    dists = df2['lat_lon'].apply(lambda x: geodesic(point, x).miles)
    closest = df2.loc[dists.idxmin()]
    return closest