Не уверен, что это правильный подход. Я использую регулярное выражение для получения необходимого результата.
Демо:
import pandas as pd
import re
df = pd.DataFrame({"col1": ["mmm2", "mmm5"], "col2": ["Hello I want Mmm2 replace it", "I want MMM5 replace it"]})
df["output"] = df.apply(lambda row: re.sub(row["col1"], "", row["col2"], flags=re.IGNORECASE), axis=1)
df["output"] = df.apply(lambda row: "{0} {1}".format(re.search(row["col1"], row["col2"], flags=re.IGNORECASE).group(0), row["output"]), axis=1)
print(df)
Выход:
col1 col2 output
0 mmm2 Hello I want Mmm2 replace it Mmm2 Hello I want replace it
1 mmm5 I want MMM5 replace it MMM5 I want replace it