Я думаю, что вы хотите numpy.where
, потому что replace
используется для замены на скаляры, тогда для сравнения длин используйте Series.str.len
, только для значения предварительного сгиба +
и для поиска используйте apply
:
df = pd.DataFrame(data={'a': ['aa', 'bb', 'c banana a dupa', 'dd'],
'b': ['\w','\d','[ab-c]','[^c b]']})
df['filter'] = np.where(df['a'].str.len() > 2,
"dupa " + df['b'],
df.apply(lambda x: re.search(x['b'], x['a']), axis=1))
print (df)
a b filter
0 aa \w <re.Match object; span=(0, 1), match='a'>
1 bb \d None
2 c banana a dupa [ab-c] dupa [ab-c]
3 dd [^c b] <re.Match object; span=(0, 1), match='d'>