Заменить значения в Series по совпадению с подстроками из списка

Необходимо заменить значения в Series по совпадению с подстроками из списка. Сейчас заменяется вообще все

Series такой

0                       покупка жилья
1             приобретение автомобиля
2                       покупка жилья
3          дополнительное образование
4                     сыграть свадьбу
                     ...             
21520               операции с жильем
21521            сделка с автомобилем
21522                    недвижимость
21523    на покупку своего автомобиля
21524           на покупку автомобиля
Name: purpose, Length: 21525, dtype: object

Нужно заменить все что подойдет под "str.contains('недвиж', 'жиль')" на единое значение

df['purpose'] = df[df['purpose'].str.contains('недвиж', 'жиль').any(), 'purpose'] = 'YYY'

0        YYY
1        YYY
2        YYY
3        YYY
4        YYY
        ... 
21520    YYY
21521    YYY
21522    YYY
21523    YYY
21524    YYY
Name: purpose, Length: 21525, dtype: object

Пожалуйста объясните как заменить только те слова которые подходят под ключевые слова


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

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

во-первых, вы зря используете метод any - он отрабатывает все серию (колонку) сразу, и поэтому всегда возвращает True. во-вторых, нельзя в метод srt.contains передавать итератор. туда нужно передавать паттерн. Можно, однако, передавать паттерн в виде перечисления:

import pandas as pd
s = pd.Series(['покупка жилья', 'приобретение автомобиля', 'покупка жилья', 'дополнительное образование', 'недвижимость'])
0                 покупка жилья
1       приобретение автомобиля
2                 покупка жилья
3    дополнительное образование
4                  недвижимость
s.str.contains("|".join(['недвиж', 'жиль']))
0     True
1    False
2     True
3    False
4     True
→ Ссылка