为Haversine距离准备数据

Posted

技术标签:

【中文标题】为Haversine距离准备数据【英文标题】:Prepare data for Haversine distance 【发布时间】:2019-11-11 11:49:26 【问题描述】:

我想为id 的每个唯一值计算haversine 距离:

from haversine import haversine, Unit

data = 

id latitude longitude 
a        11        22
a        33        44
b        55        66
b        77        88
c        99        11
c        12        13

start = (11,22) # (lat, lon)
end = (33,44)
haversine(start,end)*1000

如何为它创建一个循环?因为真实数据有2000+ids

关于 Hvaersine 有很多很好的问题,但没有关于数据准备的答案。这个问题主要是关于数据准备的

【问题讨论】:

【参考方案1】:

2000 并不多,你可以用一个简单的 python 循环来处理它。但如果您更喜欢 pandas-native 方法,您可以执行以下操作:

df.groupby('id').apply(lambda g: haversine(g.iloc[0], g.iloc[1])) * 1000

考虑到您的数据集对于每个 id 始终有一对点。

输出:

id
a    3.320380e+06
b    2.601419e+06
c    9.673377e+06

【讨论】:

顺便说一句,你的第一个代码更快haversine = data.set_index('id_easy').apply(tuple,axis=1).groupby(level=0).apply(lambda x: haversine(x.iat[0],x.iat[1])*1000)

以上是关于为Haversine距离准备数据的主要内容,如果未能解决你的问题,请参考以下文章

对haversine公式使用列表推导

Ruby on rails Haversine gem:将计算距离转换为公里

计算两个经纬度点之间的距离? (Haversine 公式)

使用 Haversine 的距离公式获取经度和纬度的距​​离

如何使用 Haversine 公式计算行驶距离(不是位移)?

在计算Haversine距离时,主for循环只运行一次