python - 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.
我想我在这里迷失了。
解决方案
您正在传递整个df2
to 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
推荐阅读
- arrays - Vuex state.array.push 在数组行内添加对象
- javascript - 实时音频网络到桌面应用程序
- node.js - 在 golang 中解密 JWE 令牌
- accelerometer - 我可以使用什么算法来计算使用加速度计和陀螺仪的步数?
- excel - 将 Word 文件表格复制到 Excel 文件(合并单元格和多行单元格)
- angular - Angular: setting ViewEncapsulation.None globally
- java - Scala 类型的语句?
- python - 如何在python中将文件保存为excel时显示进度条?
- c++ - 通过串行通信发送的每个值后为零
- bash - sqlite3 无法仅从 1 个 tsv 文件导入数据