【发布时间】:2019-03-19 18:35:48
【问题描述】:
我有两组 lats 和 longs,我希望通过笛卡尔连接加入并找出每对之间的距离。在number 或other_number 中可能有重复项(即每个标识符有两个位置/地址)。
d = {'number': ['100', '101'], 'lat': ['40.6892', '41.8902'], 'long': ['74.0445','12.4922']}
d2 = {'other_number': ['200', '201'], 'lat': ['37.8199', '43.8791'], 'long': ['122.4783','103.4591']}
data = pd.DataFrame(data=d)
data2 = pd.DataFrame(data=d2)
我目前正在将 lat/long 字段转换为元组列表...
tuple_list_1 = list(zip(data.lat.astype(float), data.long.astype(float)))
tuple_list_2 = list(zip(data2.lat.astype(float), data2.long.astype(float)))
...然后使用生成器执行笛卡尔连接。
gen = ([x, y] for x in tuple_list_1 for y in tuple_list_2)
最后,我用一个简单的循环找到了距离:
from geopy.distance import geodesic
for u, v in gen:
dist = geodesic(u, v).miles
print(dist)
最终,我希望将距离绑定回原始信息(即number 和other_number)。这是我想要的结果:
d3 = {'number': ['100', '100','100','100'],
'address': ['Statue of Liberty', 'Statue of Liberty', 'Colosseum', 'Colosseum'],
'other_number': ['200', '200', '201', '201'],
'other_address': ['Golden Gate Bridge','Mount Rushmore','Golden Gate Bridge','Mount Rushmore'],
'distance':[2572.262967759492,1515.3455804766047,5400.249562015358,4365.4386483486205]
}
data3 = pd.DataFrame(data=d3)
如何有效地检索距离(我认为循环通过生成器可能效率不高),并将结果与最终 DataFrame 中的识别字段联系起来?
【问题讨论】:
标签: python python-3.x pandas geopy