0

我有一个带有 x,y 列的熊猫数据框,其中包含坐标。这些坐标是地面激光雷达点云坐标。我想找到最接近 1000 的 x 和最接近 2000 的 y 坐标的扫描位置坐标(在扫描期间设置为 X = 1000,Y = 2000 的原始扫描位置)。这是示例数据(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 个最接近 1000 和 2000 的 X、Y 值。现在我想找到这些数字的索引值。

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

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

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

4

1 回答 1

0

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

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

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

df.nsmallest(5, "dist")  # return the 5 closest X,Y pairs
于 2018-06-15T03:14:52.290 回答