У меня есть два кадра данных. Один содержит properties locations
, а другой содержит railway stations locations
.
образец данных dataframe (исходный Dataframe состоит из ~ 700 строк):
properties=pd.DataFrame({'propertyID':['13425','32535','43255','52521'],
'lat':[-37.79230,-37.86400,-37.85450,-37.71870],
'lon':[145.10290,145.09720,145.02190,144.94330]})
образец данных железнодорожного вокзала (оригиналКадр данных состоит из ~ 90 строк):
stations=pd.DataFrame({'stationID':['11','33','21','34','22'],
'lat':[-37.416861,-37.703293,-37.729261,-37.777764,-37.579206],
'lon':[145.005372,144.572524,144.650631,144.772304,144.728165]})
У меня есть функция для расчета расстояния между двумя местоположениями
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
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 = 6378 # Radius of earth in kilometers
return c * r
Я хочу найти расстояние между каждым свойством и всеми станциями. Затем выберите станцию с кратчайшим расстоянием.
Я пытался создать цикл for, но он не возвращает кратчайшее расстояние (мин)
lst=[]
for stopLat in stations['lat']:
for stopLon in stations['lon']:
for propLat in properties['lat']:
for propLon in properties['lon']:
lst.append(haversine(propLon,propLat,stopLon,stopLat))
Мой конечный результат будет выглядеть следующим образом. (Каждое свойство связано с ближайшей станцией).
stationID propertyID
11 52521
33 13425
21 32535
34 43255
Любой совет о том, как подойти к этому, будет полезен. Спасибо