首页 > 解决方案 > Geopy从两个数据帧计算测地线距离

问题描述

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

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

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

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.

我想我在这里迷失了。

标签: pythonpython-3.xpandasgeopy

解决方案


您正在传递整个df2to 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

推荐阅读