Ниже приведен образец моего df
name
A S BITO
A S KIGEL
A S NATURENERGI
A S NATURENERGIE
A S NATURENERGIE
A S P BU SERVICE POWER P
A S P BU SERVICE POWER P
A S P BU SERVICE POWER PETER GMBH
A S P GMBH
A RESE LAND
A RITTER WITH SA
A RITTER WITH SA
A RITTER WITH SA
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER WITH MASCHINE
A RITTER WITH MASCHINE SA CO
A RITTER WITH MASCHINE SA CO
Цель состоит в том, чтобы заменить имя уникальным значением с наибольшим количеством случаев
Ниже приведен список уникальных значений
name occurences
A S BITO 1
A S KIGEL 1
A S NATURENERGI 1
A S NATURENERGIE 2
A S P BU SERVICE POWER P 2
A S P BU SERVICE POWER PETER GMBH 1
A S P GMBH 1
A RESE LAND 1
A RITTER WITH SA 3
A RITTER SA CO 4
A RITTER WITH MASCHINE 1
A RITTER WITH MASCHINE SA CO 2
Как вы можете видеть с помощью DF, некоторые имена можно сгруппировать.
Однако из-за орфографической ошибки нет.
Желаемый результат будет выглядеть так
name
A S BITO
A S KIGEL
A S NATURENERGIE
A S NATURENERGIE
A S NATURENERGIE
A S P BU SERVICE POWER P
A S P BU SERVICE POWER P
A S P BU SERVICE POWER P
A S P GMBH
A RESE LAND
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
A RITTER SA CO
Ниже показан проверенный код
df['name'] = df['name'].replace('A S NATURENERGI', 'A S NATURENERGIE')
df['name'] = df['name'].replace('A S P BU SERVICE POWER PETER GMBH', 'A S P BU SERVICE POWER P')
df['name'] = df['name'].replace('A RITTER WITH SA', 'A RITTER SA CO')
df['name'] = df['name'].replace('A RITTER WITH MASCHINE', 'A RITTER SA CO')
df['name'] = df['name'].replace('A RITTER WITH MASCHINE SA CO ', 'A RITTER SA CO')
Однако это может быть не лучший способ справиться с этим.
Таким образом, я думал об использовании diffflib и вычислении оценки соответствия.
Следующим шагом будет замена имени совпадением с наибольшим количеством очков.
f = partial(difflib.get_close_matches, possibilities= df['name'].tolist(), n=1) #
matches = df['name'].map(f).str[0].fillna('')
scores = [difflib.SequenceMatcher(None, x, y).ratio() for x, y in zip(matches, df['name'])]
df_diff = df.assign(best=matches, score=scores)
Обратной стороной этого метода является то, что я получу точно такое же имя ...
Итак, если у кого-то есть идеи, большое спасибо!