(IPython笔记本)
(公交车统计数据)
summary.head()
我需要计算每两行之间的distance_travelled,其中
1)row ['sequence']!= 0,因为当公交车在初始站点时没有距离
2)row ['track_id'] == previous_row ['track_id']。
我已经定义了haversine公式:
summary.head()
![enter image description here](https://istack.dev59.com/41VVK.webp)
我已经定义了haversine公式:
def haversine(lon1, lat1, lon2, lat2):
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
我不确定如何处理这个问题。其中一个想法是使用itterrows()和apply harvesine()函数,如果行的'sequence'参数不为0且行的'track_id'等于上一行的'track_id'
[编辑]我发现没有必要检查行和前一行的'track_id'是否相同,因为haversine()函数仅应用于两个行,并且当sequence = 0时,该行的距离== 0,这意味着track_id已更改。因此,基本上将haversine()函数应用于所有'sequence'!= 0的行,即haversine(previous_row.lng,previous_row.lat,current_row.lng,current_row.lat)。尽管如此,仍需要帮助
[编辑2] 我通过以下方式实现了类似的结果:
summary['distance_travelled'] = summary.apply(lambda row: haversine(row['lng'], row['lat'], previous_row['lng'], previous_row['lat']), axis=1)
之前的代码中,previous_row只是一个占位符字符串,实际上应该是previous_row。