У меня есть следующий фрейм данных df (образец):
lat lon crs Band1 x y
0 41.855584 20.619156 b'' 1568.0 468388.198606 4.633812e+06
1 41.855584 20.622590 b'' 1562.0 468673.173031 4.633811e+06
2 41.855584 20.626023 b'' 1605.0 468958.147443 4.633810e+06
3 41.859017 20.612290 b'' 1598.0 467819.970900 4.634196e+06
4 41.859017 20.615723 b'' 1593.0 468104.930108 4.634195e+06
5 41.859017 20.619156 b'' 1600.0 468389.889303 4.634193e+06
6 41.859017 20.622590 b'' 1586.0 468674.848486 4.634192e+06
7 41.859017 20.626023 b'' 1577.0 468959.807656 4.634191e+06
8 41.859017 20.629456 b'' 1584.0 469244.766814 4.634190e+06
9 41.859017 20.632889 b'' 1598.0 469529.725959 4.634188e+06
поля x
и y
- координаты в плоскости xy, а Band1
- высота точки (по сути это координата z) , Кадр данных представляет собой прямоугольную сетку с x
и y
в качестве центральной координаты сетки и Band1
в качестве высоты сетки.
Как определить, какая из ячеек сетки имеет наивысший показатель в Band1
по сравнению с соседними ячейками?
Ожидаемый результат в этом случае - дополнительный столбец в кадре данных с логическим значением, определяющим, что ячейка имеет наивысшую высоту Band1
перед соседними 4 ячейками.
Я могу легко получить соседние расстояния сетки и индексы с помощью:
X=df[['x','y']].to_numpy()
nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(X)
distances, indices = nbrs.kneighbors(X)
С выходом Индексов:
array([[0, 1, 5, 6, 4],
[1, 2, 0, 6, 7],
[2, 1, 7, 8, 6],
[3, 4, 5, 0, 6],
[4, 5, 3, 0, 6],
[5, 6, 4, 0, 1],
[6, 7, 5, 1, 2],
[7, 8, 6, 2, 1],
[8, 9, 7, 2, 6],
[9, 8, 7, 2, 6]], dtype=int64)
Я могу l oop, хотя в dataframe и сравнивать все элементы, но его ресурс потребляет, так как у меня есть 1M строк. Любая помощь приветствуется.