Вы можете сделать это, используя scikit-learn:
import numpy as np
from sklearn.neighbors import DistanceMetric
dfr = df.copy()
dfr.Lat = np.radians(df.Lat)
dfr.Lon = np.radians(df.Lon)
hs = DistanceMetric.get_metric("haversine")
(hs.pairwise(dfr)*6371) # Earth radius in km
Выход:
array([[ 0. , 48.56264446, 139.2836099 ],
[ 48.56264446, 0. , 130.57312786],
[139.2836099 , 130.57312786, 0. ]])
Обратите внимание, что выходные данные представляют собой квадратную матрицу, где элемент (i, j) - это расстояние между строкой i и строкой j
Это кажется быстрее, чем использование pdist от scipy с пользовательской haversine
функцией