Я работаю в фрейме данных Pandas и пытаюсь получить расстояние от долготы и широты для каждой точки для каждого идентификатора.
Вот этот фрейм данных:
Identifier num_pts latitude longitude
0 AL011851 3 28.0 -94.8
1 AL011851 3 28.0 -95.4
2 AL011851 3 28.1 -96.0
3 AL021851 2 22.2 -97.6
4 AL021851 2 12.0 -60.0
Я знаю, что должен использовать формулу расстояния Haversine, но я не уверен, как включить ее, используя мои данные.
import numpy as np
def haversine(lon1, lat1, lon2, lat2, earth_radius=6367):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
All args must be of equal length.
"""
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2
c = 2 * np.arcsin(np.sqrt(a))
km = earth_radius * c
return km
Здесь должен быть мой конечный результат, рассчитанный на бумаге с использованием только широты и долготы:
Identifier num_pts latitude longitude distance
0 AL011851 3 28.0 -94.8 NaN
1 AL011851 3 28.0 -95.4 58.870532
2 AL011851 3 28.1 -96.0 58.870532
3 AL021851 2 22.2 -97.6
4 AL021851 2 12.0 -60.0
РЕДАКТИРОВАТЬ: мне нужно рассчитать расстояние между последовательными точками, такими как 0 и 1,и 2, и он должен быть сгруппирован по идентификатору, чтобы убедиться, что точки не получены из разных идентификаторов, поэтому, когда существует новый идентификатор, такой как AL021851, он сбрасывает и вычисляет только точки в этом идентификаторе