识别同一行中的x,y坐标,分别最接近1000,2000

时间:2018-06-15 02:22:19

标签: python pandas lidar

我有一个包含坐标的x,y列的pandas数据框。这些坐标是地面激光雷达点云坐标。我想找到最接近1000的x的扫描位置坐标和最接近2000的y坐标(在扫描期间设置为X = 1000,Y = 2000的原始扫描位置)。这是示例数据(h - 高度,i - 强度):

         x          y         h      i
0   1088.347856 1877.719005 94.869  0.0

1   1083.338856 1886.024105 95.404  2566.0

2   1078.758756 1890.846705 93.314  0.0

3   1078.781556 1890.810205 93.479  257.0

4   1078.791256 1890.804605 93.559  1026.0

5   1078.804756 1890.778805 93.729  1540.0

6   1078.900756 1890.792905 94.324  1283.0

7   1078.900756 1890.792905 94.579  0.0

8   1078.919556 1890.771805 94.749  513.0

9   1078.892856 1890.663205 95.934  770.0

10  1078.841956 1890.731405 95.259  1026.0

我到目前为止,试图找到最近的坐标:

for x_min in df['x']:
for y_min in df['y']:
    x_min = min(df.iloc[:,0], key=lambda x:abs(x-1000))
    y_min = min(df.iloc[:,1], key=lambda y:abs(y-2000))
  

这给了我大约100 X,Y值最接近1000和2000.现在我想找到这些数字的索引值。

    item_index_x = np.where(df.iloc[:,0]==x_min)
    item_index_y = np.where(df.iloc[:,1]==y_min)
  

这里我试图找出同一行中是否有任何X,Y坐标,不确定下面的代码是否正确。           if item_index_x == item_index_y:               打印(item_index_x)               打印(item_index_y)

不幸的是,它没有在同一行中给出最接近1000,2000的任何坐标。但是它找到了X最接近1000的坐标和Y最接近2000的坐标,这意味着例如X = 1000.00001但是Y = 1998.0023。我想知道是否有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

如果我理解你要求的东西,似乎相对距离可以用两个差异的总和来表示:

df['dist'] = abs(df['x']-1000) + abs(df['y']-2000)

然后你最近的X,Y对将基于最小距离:

df.nsmallest(5, "dist")  # return the 5 closest X,Y pairs