Один из способов - работать с sets
и взять intersection
из двух указанных списков с соответствующим индексом, имеющим split
строк. Затем мы можем использовать sorted
, чтобы отсортировать результат по df1.text
и join
элементам в списке вместе:
res = [' '.join(sorted(set(s1.split()) & set(s2.split()), key=s1.split().index))
for s1, s2 in zip(df1.text, df2.text)]
out = pd.DataFrame(res, columns=['Text'])
print(out)
Text
0 Hello world how are you
1 Hello I am fine
2 Good people
3 Good
Для более удобочитаемого решения:
res = []
for s1, s2 in zip(df1.text, df2.text):
set_s2 = s2.split()
set_int = set(set_s2) & set(s1.split())
s_int = sorted(set_int, key=set_s2.index)
res.append(' '.join(s_int))
out = pd.DataFrame(res, columns=['Text'])