Не очень Pythoni c и эффективное решение, но это сделает работу
df = df.words.str.split('(llo|lut)', expand=True)
df[0] = df[0] + df[1]
df = df.drop(1, axis = 1)
df = df.rename(columns = {0 : "words1", 2 : "words2"})
Это выведет
words1 words2
0 hello world
1 hello madame
2 salut monde
3 salut madame
4 englishhello world
5 englishhello madame
6 francaissalut monde
7 francaissalut madame
При переименовании ключи словаря должны были быть 0 и 2, потому что после объединения структура данных выглядит как
0 1 2
0 hello llo world
1 hello llo madame
2 salut lut monde
3 salut lut madame
4 englishhello llo world
5 englishhello llo madame
6 francaissalut lut monde
7 francaissalut lut madame
, а после удаления столбца 1 она становится
0 2
0 hello world
1 hello madame
2 salut monde
3 salut madame
4 englishhello world
5 englishhello madame
6 francaissalut monde
7 francaissalut madame
Имена столбцов равны 0 и 2, следовательно, переименование 0 и 2 сделано. Надеюсь, это поможет!