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
我正在尝试使用 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