Как удалить слова из одного кадра данных, которые не находятся в другом - PullRequest
1 голос
/ 06 мая 2019

Я хочу удалить все слова из df2, которых нет в df1.

Мой df1 выглядит так:

id    text                                 
1     Hello world how are you people    
2     Hello people I am fine  people   
3     Good Morning people              
4     Good Evening                     

Мой df2 выглядит так:

id    text                                 
1     Hello world how are you all
2     Hello everyone I am fine everyone
3     Good Afternoon people              
4     Good Night

Ожидаемый результат df2:

id    text                                 
1     Hello world how are you
2     Hello I am fine
3     Good people              
4     Good

Редактировать: Будет хорошо, если я смогу распечатать слова, которые я удалил, и их количество (общее количество слов, которые я удалил)

1 Ответ

1 голос
/ 06 мая 2019

Один из способов - работать с 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'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...