Вот решение, использующее регулярное выражение. Он берет все имена из столбца имен и удаляет @
. Затем он добавляет перед ними @?
, что означает необязательный @
в регулярном выражении. Затем он объединяет их все с помощью |
, что позволяет передать их все функции Series.str.replace
, заменяя их пустыми строками. Это предполагает отсутствие согласованности между именами, имеющими @
в текстовом столбце и в столбце имени. Если есть, есть еще более простое решение.
import re
df = pd.DataFrame({
'name': ['@dnsTV2', 'Sebastian', '@raisa', 'imax468', 'oksana', 'extra'],
'text': ['@raisa Bullshit!',
'@dnsTV2, are you kidding?',
'@dnsTV2 thanks to corona...',
'@oksana what do you mean by that???',
'raisa! It is so true!',
'this row has now nicknames']
})
regexes = '|'.join(['@?' + re.escape(name) for name in df.name.str.replace('@', '')])
df['text2'] = df['text'].str.replace(regexes, '')
df
name text \
0 @dnsTV2 @raisa Bullshit!
1 Sebastian @dnsTV2, are you kidding?
2 @raisa @dnsTV2 thanks to corona...
3 imax468 @oksana what do you mean by that???
4 oksana raisa! It is so true!
5 extra this row has no nicknames
text2
0 Bullshit!
1 , are you kidding?
2 thanks to corona...
3 what do you mean by that???
4 ! It is so true!
5 this row has no nicknames