我将试着解释一下我目前的工作内容: 我有两个数据帧:一个用于加油站A(165个加油站),另一个用于加油站B(257个加油站)。它们都有相同的格式:
id Coor
1 (a1,b1)
2 (a2,b2)
库尔有位置坐标的元组。我要做的是在数据帧A中添加3列,其中包含最近的竞争对手#1、#2和#3(来自加油站B)。 目前,我设法获得了从A到B的每一个距离(42405个距离度量值),但采用的是列表格式:
distances=[]
for (u,v) in gasA['coor']:
for (w,x) in gasB['coor']:
distances.append(sp.distance.euclidean((u,v),(w,x)))
这让我有了所需的值,但我仍然需要将它们与加油站A的ID匹配,并得到前3个。我怀疑在这里使用列表不是最好的方法。你有什么建议吗?你知道吗
编辑:根据建议,前5行是: 在加萨:
id coor
60712 (-333525363206695,-705191013427772)
60512 (-333539879388388, -705394161580837)
60085 (-333545609177068, -703168832659184)
60110 (-333601677229216, -705167284798638)
60078 (-333608898397271, -707213099595404)
在GasB中:
id coor
70174 (-333427160000000,-705459060000000)
70223 (-333523030000000, -706705470000000)
70383 (-333549270000000, -705320990000000)
70162 (-333556960000000, -705384750000000)
70289 (-333565850000000, -705104360000000)
创建数据:
计算距离:
从B中选择前3个最近的桩号并附加到a中的一列:
编辑示例运行结果:
你可以这样做。你知道吗
我们可以得到两个坐标的numpy数组,然后广播a来表示它的所有组合,然后取欧氏距离。你知道吗
定义一个函数,用于计算从a到所有B的距离,并返回具有三个最小距离的B的索引。你知道吗
相关问题 更多 >
编程相关推荐