Настройка
df = pd.DataFrame({
'id': [1,1,1,1,2,2,2,3,3,3],
'fruit': ['Apple', 'Banana', 'Orange', 'Banana', 'Apple', 'Orange', 'Orange', 'Apple', 'Apple', 'Orange']
})
Опция 1
cumcount
с replace
и конкатенацией строк (я использую шаблон регулярного выражения, который соответствует только одному нулю, поэтому этот ответ также может поддерживать более 9 дубликатов на группу):
df['fruit'] = df.fruit + df.groupby(
['id', 'fruit']).cumcount().astype(str).replace(
r'^0$', '', regex=True
)
Вариант 2
Сохранение групповой информации и использование логического индексирования с fillna
(лично я предпочитаю такой подход)
s = df.groupby(['id', 'fruit']).cumcount()
df['fruit'] = (df.fruit + s[s>0].astype(str)).fillna(df.fruit)
Обарезультат:
id fruit
0 1 Apple
1 1 Banana
2 1 Orange
3 1 Banana1
4 2 Apple
5 2 Orange
6 2 Orange1
7 3 Apple
8 3 Apple1
9 3 Orange