【发布时间】:2019-10-24 07:40:38
【问题描述】:
我有两个数据框。一个包含properties locations,另一个包含railway stations locations。
属性数据框示例(原始数据框由约 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
任何有关如何解决此问题的建议都会有所帮助。谢谢
【问题讨论】:
-
您指的是最短路径,例如图 Djikstra,我认为使用 networkx 很容易吗?
标签: python pandas distance haversine