Как заменить повторяющихся индексы на новые?

У меня есть двумерный массив, в котором в первом столбце должны быть написаны уникальные числа от 1 до n. Проблема в том, что некоторых чисел там несколько и нужно заменить повторяющиеся на максимальное + 1.

database - название массива, который нужно обработать.

Вот так я пробовал, но тут происходит замена всех повторяющихся чисел, а мне нужно оставить уникальное число напротив каждого рядка:

array2 = np.unique(database[:, 0], return_counts=True)
        i = 0
        max = np.amax(array2[0]) + 1
        while array2[1].size > i:
            if(array2[1][i] > 1):
                database[database == array2[0][i]] = max
                max = max + 1
            i = i + 1

введите сюда описание изображения

Вот что я доделал и оно работает, но я думаю, что это можно сделать в несколько строк, а не писать вот такие циклы

            array2 = np.unique(database[:, 0], return_counts=True)
        i = 0
        max = np.amax(array2[0]) + 1
        while array2[1].size > i:
            if(array2[1][i] > 1):
                q = np.where(database[ : , 0] == array2[0][i])
                j = 1
                while j < q[0].size:
                    database[q[0][j]][0] = max
                    max = max + 1
                    j = j + 1
            i = i + 1

введите сюда описание изображения


Ответы (1 шт):

Автор решения: MaxU
a = database[:, 0]
idx = np.arange(1, len(a))[np.diff(a) == 0]
a[idx] = np.arange(a.max() + 1, a.max() + len(idx) + 1)

Пример:

исходный вектор:

In [101]: a = np.array([5,6,6,6,7,8,8,9])

In [102]: a
Out[102]: array([5, 6, 6, 6, 7, 8, 8, 9])

решение:

idx = np.arange(1, len(a))[np.diff(a) == 0]

a[idx] = np.arange(a.max() + 1, a.max() + len(idx) + 1)

результат:

In [105]: a
Out[105]: array([ 5,  6, 10, 11,  7,  8, 12,  9])
→ Ссылка