#regex #pandas
#регулярное выражение #pandas
Вопрос:
У меня есть задача обновить значения в column_1, ЕСЛИ они полностью совпадают со значением из column_2. Вот так
name city
Danny London London
Tim Detroit Detroit
Keith New Orleans The city of New Orleans
Mary Jane London
=>
name city
Danny London <- updated
Tim Detroit <- updated
Keith New Orleans The city of New Orleans
Mary Jane London
До сих пор я пробовал это
condlidt = [df.apply(lambda x: x.name_cleaned.endwith(f"{x.city}"), axis=1)]
choicelist = [df.name_cleaned.str.replace(rf'{df.city}$', '', regex=True]
fd['name_cleaned'] = np.select(condlist, choicelist, default=df.name_cleaned)
Но он возвращает тот же df. Я проверил и condlist
работает как ожидалось — возвращает True / False для значений, проблема в choicelist
— не уверен, как передать регулярное выражение с динамическим значением. Был бы очень признателен за любую помощь.
Ответ №1:
Вместо проверки endswith
вы можете добавить значение $
для конца строки, а также s
для совпадающих пробелов и преобразовать эти значения в пустую строку в re.sub
:
import re
df['name'] = df.apply(lambda x: re.sub(rf"s {x.city}$",'',x['name']), axis=1)
print (df)
name city
0 Danny London
1 Tim Detroit
2 Keith New Orleans The city of New Orleans
3 Mary Jane London