用Python函数计算Pandas的haversine公式计算距离

2024-04-26 07:30:15 发布

您现在位置:Python中文网/ 问答频道 /正文

(IPython笔记本) (公交统计)

在摘要.head()

enter image description here

我需要计算出每两排之间行驶的距离,在哪里 1) 行['sequence']!=0,因为当公共汽车在他的起始站时没有距离2)行['track_id']==上一行['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

我不太清楚该怎么办。其中一个想法是,如果行的“sequence”参数不为0,并且行的“track_id”等于前一行的“track_id”,则使用itterrows()和apply harvesine()函数

[编辑]我认为没有必要检查行和上一行的“track_id”是否相同,因为haversine()函数只应用于两行,当sequence=0时,该行的距离==0,这意味着track_id已经更改。所以,基本上,将haversine()函数应用于其“sequence”的所有行!=0,即haversine(上一个_世界其他地区液化天然气,上一个_row.lat.行,当前_世界其他地区液化天然气,当前_row.lat.行). 但仍需要帮助

[编辑2] 我成功地实现了类似的目标:

^{pr2}$

其中previous_row实际上应该是previous_row,因为现在它只是一个占位符字符串,不起任何作用。在


Tags: 函数id距离tracksincosrowsequence
1条回答
网友
1楼 · 发布于 2024-04-26 07:30:15

你可以试试:

print summary

  track_id  sequence        lat        lng  distance_travelled
0      1-1         0  41.041870  29.060010                   0
4      1-1         1  41.040859  29.059980                   0
6      1-1         2  41.039242  29.059731                   0
#create new shifted columns  
summary['latp'] = summary['lat'].shift(1)
summary['lngp'] = summary['lng'].shift(1)
print summary

  track_id  sequence        lat        lng  distance_travelled       latp  \
0      1-1         0  41.041870  29.060010                   0        NaN   
4      1-1         1  41.040859  29.059980                   0  41.041870   
6      1-1         2  41.039242  29.059731                   0  41.040859   

       lngp  
0       NaN  
4  29.06001  
6  29.05998  
summary['distance_travelled'] = summary.apply(lambda row: haversine(row['lng'], row['lat'], row['lngp'], row['latp']), axis=1)
#remove column lngp, latp
summary = summary.drop(['lngp','latp'], axis=1)
print summary

  track_id  sequence        lat        lng  distance_travelled
0      1-1         0  41.041870  29.060010                 NaN
4      1-1         1  41.040859  29.059980            0.112446
6      1-1         2  41.039242  29.059731            0.181011

相关问题 更多 >