Как заменить значения дубликатов на уникальные значения?

Рейтинг: 0Ответов: 1Опубликовано: 21.06.2023

Подскажите пожалуйста, возможно ли без циклов в pandas заменить дублирующийся значения на уникальные? К примеру, если в столбце есть значения 100, 100, 200, 200, 200, то на выходе должно получиться, например, 100-1, 100-2, 200-1, 200-2, 200-3.

На входе есть таблица фрейм данных:

dataframe = pd.DataFrame({'article': ['art.01', 'art.02', 'art.03', 'art.04', 'art.05', 'art.06'], 'price': [100, 200, 300, 100, 150, 100], 'posting_number': ['1000-100-1', '2000-100-1', '1000-100-1', '1000-100-1', '2000-100-1', '3000-100-1']})

Необходимо, чтобы для каждого дублирующего значения столбца posting_number был добавлен, например их индекс, или порядок дубликата, что бы в конечном счете все значения в posting_number были уникальными. Я попытался это сделать примерно так, но ничего не вышло.

dataframe[dataframe.duplicated(["posting_number"])] \
    .loc["posting_number"] = dataframe["posting_number"] + "-" + str(dataframe.index)

Как возможно решить данную задачу?

Ответы

▲ 4Принят

Воспользуйтесь группировкой с подсчетом и конкатенацией столбцов:

df["posting_number"] = df["posting_number"]+ "-" + df.groupby("posting_number").cumcount().astype(str)
  article  price posting_number
0  art.01    100   1000-100-1-0
1  art.02    200   2000-100-1-0
2  art.03    300   1000-100-1-1
3  art.04    100   1000-100-1-2
4  art.05    150   2000-100-1-1
5  art.06    100   3000-100-1-0