我需要计算一组坐标的距离。我具有计算它的功能,但我不知道如何在数据上使用它。
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
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
return c * r
到目前为止,我所做的是将列转换为列表:
lat1= frame['Start Station Lat'].values.tolist()
long1= frame['Start Station Long'].values.tolist()
long2=frame['End Station Long'].values.tolist()
lat1= frame['End Station Lat'].values.tolist()
然后我尝试使用apply()函数:
frame['distance_travelled'] = frame.apply(lambda lon1,lat1,lon2,lat2: haversine(lon1,lat1,lon2,lat2), axis=1)
但是它没有用。请指教!
非常感谢。
因此,如果我理解正确,这可能会有所帮助;在框架上使用Apply函数可让您访问行的值,这意味着您无需将列转换为列表。因此,对于您的示例案例,您可以执行以下操作:
frame['distance_travelled'] = frame.apply(lambda x: haversine(x['Start Station Lat'],x['Start Station Long'],x['End Station Long'],x['End Station Lat']), axis=1)
以防万一,您有2x lat1作为变量名:
lat1 = frame['Start Station Lat'].values.tolist() ###HERE
long1= frame['Start Station Long'].values.tolist()
long2=frame['End Station Long'].values.tolist()
lat1= frame ['End Station Lat'].values.tolist() ###HERE