Python - переименование дублированных значений на основе другой переменной - PullRequest
0 голосов
/ 13 июня 2018

Есть ли способ переименовать значения, основанные на другой переменной?Здесь у меня есть две колонки, одна из которых ID, а другая - фрукты.Тем не менее, я думал, что можно было бы однозначно идентифицировать их на основе идентификатора

ID  Fruits
1    Apple
1   Banana
1   Orange
1   Banana
2    Apple
2   Orange
2   Orange
3    Apple
3    Apple
3   Orange

Надеялся достичь чего-то подобного

ID  Fruits
1    Apple
1   Banana
1   Orange
1  Banana1
2    Apple
2   Orange
2  Orange1
3    Apple
3   Apple1
3   Orange

1 Ответ

0 голосов
/ 13 июня 2018

Настройка

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
...