【发布时间】:2016-04-03 07:40:28
【问题描述】:
(IPython 笔记本) (公交统计)
summary.head()
我需要计算每两行之间的 distance_travelled,其中 1) row['sequence'] != 0,因为公交车在他的初始停靠站时没有距离 2) row['track_id'] == previous_row['track_id']。
我定义了半正弦公式:
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() 并应用 harvesine() 函数,如果行 'sequence' 参数不为 0 并且行的 'track_id' 等于前一行的 'track_id'
[编辑] 我认为没有必要检查行和上一行的 'track_id' 是否相同,因为 hasrsine() 函数仅应用于两行,并且当序列 = 0 时,该行的距离 = = 0,表示track_id发生了变化。因此,基本上,将 hasrsine() 函数应用于“序列”!= 0 的所有行,即 hasrsine(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,因为现在它只是一个占位符字符串,什么都不做。
【问题讨论】:
标签: python python-3.x pandas