python-3.x - 如何使用熊猫数据框中的纬度和经度计算距离?
问题描述
我有一个数据框,它有两列纬度和经度,以及 863 行,因此每一行都有一个由纬度和经度定义的点坐标。现在我想以公里为单位计算所有行之间的距离。我正在使用以下参考链接来获取纬度和经度对之间的距离。如果有几行,我可以使用参考链接完成。但是我有大行,我认为我需要一个循环来解决问题。由于我是 python 新手,我无法创建循环这个想法的逻辑。
参考链接: 根据纬度/经度获取两点之间的距离
我的数据框如下所示:
read_randomly_generated_lat_lon.head(3)
Lat Lon
43.937845 -97.905537
44.310739 -97.588820
44.914698 -99.003517
解决方案
您可以使用 scikit-learn 做到这一点:
import numpy as np
from sklearn.neighbors import DistanceMetric
dfr = df.copy()
dfr.Lat = np.radians(df.Lat)
dfr.Lon = np.radians(df.Lon)
hs = DistanceMetric.get_metric("haversine")
(hs.pairwise(dfr)*6371) # Earth radius in km
输出:
array([[ 0. , 48.56264446, 139.2836099 ],
[ 48.56264446, 0. , 130.57312786],
[139.2836099 , 130.57312786, 0. ]])
注意输出是一个方阵,其中元素 (i,j) 是第 i 行和第 j 行之间的距离
这似乎比使用带有自定义haversine
函数的 scipy 的 pdist 更快
推荐阅读
- php - 如何在 PHP 中使用十六进制提取 GIF 帧?
- flutter - 如何在 Flutter 中为卡片添加渐变?
- c# - HttpClient 重试逻辑未按预期工作(.Net Core 3.1)
- java - Spock Framework Java测试中的模拟地图参数
- reactjs - 使用 React Bootstrap 覆盖引导程序 4 时无法使 @media 查询工作
- javascript - PrestaShop 1.7 中 Supercheckout 模块的技术错误
- python - 解析根文件夹及其子文件夹中的xml文件
- python - "continue" keyword inside "if" and "while" loop
- html - 为什么我的 DIV 元素的背景颜色不可见?
- c - 这段 C 语言代码有什么问题?