我有一個位置和塔的列表。我試圖找出每個位置最接近的塔樓。我想出了一種可行的方式,但我確信這是一種非常低效的方式。Pythonic方式獲得數據框中每個點的最近點(最近鄰居)
我該如何以更pythonic的方式做到這一點?
我有大約4,000個地點和11,000個塔。我目前:
- 循環通過各個位置
- 尋找到所有的塔
- 由距離
- 排序的距離取最接近的一種,則是追加到「nearest_tower」數據幀。
下面的代碼:
nearest_tower = pd.DataFrame()
for i, location_rows in d[["Name", "Lat", "Long"]].T.iteritems():
tower_coords["Distance_km"] = tower_coords.apply(lambda row: distance_on_unit_sphere(location_rows ["Lat"], location_rows ["Long"], row['DIGITAL_LATITUDE'], row['DIGITAL_LONGITUDE'])*6373, axis=1)
a = tower_coords.sort(['Distance_km'], ascending = 1)[:1][["SITE_NUMBER", "DIGITAL_LATITUDE", "DIGITAL_LONGITUDE", "Distance_km"]]
a["Location_Name"] = location_rows ["Name"]
a["Location_Lat"] = location_rows ["Lat"]
a["Location_Long"] = location_rows ["Long"]
nearest_tower = nearest_tower.append(a)
print(i)
Tower_coords看起來是這樣的:
SITE_NUMBER DIGITAL_LATITUDE DIGITAL_LONGITUDE
1 67.21 -30.432
...
什麼是tower_coords?這是什麼樣子? – usethedeathstar
如果將本地塔的距離放在堆中,可能會彈出最近的塔。但可能還有更高效的數據結構來解決這個問題,比如kd tree @Hbcdev提到 –
@usethedeathstar文件添加的例子,它只是顯示了一個塔的經度和緯度 – Ger