найти максимальный индекс с тем же индексом по другой оси в python

#python #numpy

#питон #numpy #python

Вопрос:

У меня есть массив на python, подобный этому, который содержит координаты некоторых точек, для которых для каждой строки первый столбец равен x, а второй — y

 [[1,2],
[1,5],
[1,3],
[2,4],
[2,3]]
  

Мне нужно найти точки с максимальным значением y для точек с тем же значением x. для приведенного выше массива мне требуется этот вывод

 [[1,5],
[2,4]]
  

Обратите внимание, что я должен делать это без какого-либо цикла в python

Ответ №1:

К сожалению, Numpy не поддерживает группировку, но вы можете использовать соответствующую функцию Pandas, а затем преобразовать обратно в Numpy массив или даже обычный pythonic список:

 result = pd.DataFrame(a).groupby(0).max().reset_index().values.tolist()
  

Я предполагаю, что a — это ваш исходный массив Numpy, созданный, например, с:

 a = np.array([[1,2], [1,5], [1,3], [2,4], [2,3]])
  

Обратите также внимание, что другое решение содержит цикл for, встроенный в
понимание списка, но вам нужно решение без какого-либо цикла
(точно так же, как у меня).

Ответ №2:

Посмотрите, работает ли это с помощью itertools.groupby

 from itertools import groupby

values = [[1,2], [1,5], [1,3], [2,4], [2,3]]

print(
    [max(v) for _, v in groupby(values, key = lambda x : x[0])]
)
  

 [[1, 5], [2, 4]]