Функция для замены дубликатов

Есть data series с названиями населенных пунктов в разном написании, которые нужно привести к единому виду. Например, вместо МО, Подмосковье и Моск. обл. везде должно стоять "Московская область". Таких серий много. Решение мне видится в создании словаря, в котором ключом будет правильное название, а значениями - все вариации написания, которые нужно выловить и заменить. Видимо, нужно написать функцию, которая будет это делать. Но мне не хватает опыта написать правильно. Пробовала просто функцию написать, но не работает. Буду очень благодарна за помощь с функцией для словаря!

 def duplicates (col, (oldvalues), newvalue):
     duplicates=oldvalue
     name=newvalue
     col=col.replace(duplicates, name, regex=True)
     return df[col] 

  duplicates (df['1_çity'], 'Подмосковье', 'Московская область')

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

Автор решения: splash58

Обычный replace, котрый работает со словарем замен

import pandas as pd
df = pd.DataFrame({'city': ['МО', 'Подмосковье', 'Моск. обл.']})
print(df)

          city
0           МО
1  Подмосковье
2   Моск. обл.


# нужно подготовить словарь, можете, например, так
lst = ['МО', 'Подмосковье', 'Моск. обл.']
replace_dict = {x: 'Московская область' for x in lst}
df.city = df.city.replace(replace_dict, regex=False )
print(df)

                 city
0  Московская область
1  Московская область
2  Московская область
→ Ссылка
Автор решения: SergFSM

немного подправить ваш код и он заработает: параметр regex должен быть равен False, ну и df[col] в return это ошибка. Теперь должно работать:

def duplicates(col, oldvalues, newvalue):
    col = col.replace(oldvalues, newvalue, regex=False)
    return col 

duplicates(df['1_çity'], ['МО', 'Подмосковье', 'Моск. обл.'], 'Московская область')

UPD

А как быть, если таких строчек несколько: dupl= {'Московская область': 'МО', 'Подмосковье','Мособласть' 'Ленинградская область': 'Комарово', 'Ленобласть'}?

в таком случае пригодится параметр regex=True, ну и соответственно надо подготовить списки для замены:

df = pd.DataFrame({'city': ['МО', 'Подмосковье', 'Моск. обл.','Ленобласть', 'Лен. обл.']})
'''
          city
0           МО
1  Подмосковье
2   Моск. обл.
3   Ленобласть
4    Лен. обл.
'''

lst = [['МО', 'Подмосковье', 'Моск. обл.'],['Ленобласть','Лен. обл.']]
new = ['Московская область','Ленинградская область']

df.city.replace(list(map('|'.join, lst)), new, regex=True)
>>>
'''
0       Московская область
1       Московская область
2       Московская область
3    Ленинградская область
4    Ленинградская область
Name: city, dtype: object
→ Ссылка