用 pandas 列替换字符串的一部分作为模式

Replace part of a string with a pandas column as pattern

我想在 pandas 列上使用 .str.replace() 方法,但使用另一个 pandas 列作为模式

例如,

df = pd.DataFrame({'str1': ['abc','abcd','def'], 'str2': ['b','ab', 'ef']})

我想通过用空字符串替换 str1 中的 str2 字符串来构建新列 str1_replaced

这是我想要得到的结果:

   str1 str2 str1_replaced
0   abc    b            ac
1  abcd   ab            cd
2   def   ef             d

我试过:

df['str1_replaced'] = df['str1'].str.replace(df['str2'],"")

但是我得到以下错误

TypeError: 'Series' objects are mutable, thus they cannot be hashed

有没有不使用 for 循环的方法来实现?我正在考虑使用 lambda 函数,但无法找到确切的操作方法。

尝试 apply:

df['str1_replaced'] = df.apply(lambda x: x['str1'].replace(x['str2'], ''), axis=1)

>>> df
   str1 str2 str1_replaced
0   abc    b            ac
1  abcd   ab            cd
2   def   ef             d
>>> 

或尝试列表理解:

df['str1_replaced'] =[x.replace(y, '') for x, y in zip(df['str1'], df['str2'])]