我有一个包含坐标的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。我想知道是否有人可以帮助我。
答案 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