Удалите необычные слова в столбцах двух информационных кадров в пандах - PullRequest
1 голос
/ 07 мая 2019

У меня есть два кадра данных: df1 и df2.

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

id   text
1    I love this car
2    I hate this car
3    Cars are life
4    Bikers are also good

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

id   text
1    I love this supercar
2    I hate cars
3    Cars are love
4    Bikers are nice

Теперь я хочу сохранить только те слова, которые есть в df1 и df2.

Слово car находится в df1, но не в df2, поэтому я хочу удалить его.

Слово life находится в df1, но не в df2, поэтому я хочу удалить его.

Слово also находится в df1, но не в df2, поэтому я хочу удалить его.

Слово good находится в df1, но не в df2, поэтому я хочу удалить его.

Слово supercar находится в df2, но не в df1, поэтому я хочу удалить его.

Слово nice находится в df2, но не в df1, поэтому я хочу удалить его.

Ожидаемый выход df1:

id   text
1    I love this
2    I hate this
3    Cars are
4    Bikers are

Ожидаемый выход df2

id   text
1    I love this
2    I hate cars
3    Cars are love
4    Bikers are

1 Ответ

2 голосов
/ 07 мая 2019

Создать пересечение слов в обоих столбцах, а затем удалить несоответствующие значения:

a = set([y for x in df1['text'] for y in x.split()])
b = set([y for x in df2['text'] for y in x.split()])
c = a & b
print (c)
{'hate', 'are', 'Bikers', 'this', 'love', 'I', 'Cars'}

df1['text'] = df1['text'].apply(lambda x: ' '.join(y for y in x.split() if y in c))
df2['text'] = df2['text'].apply(lambda x: ' '.join(y for y in x.split() if y in c))
print (df1)
   id         text
0   1  I love this
1   2  I hate this
2   3     Cars are
3   4   Bikers are

print (df2)
   id           text
0   1    I love this
1   2         I hate
2   3  Cars are love
3   4     Bikers are
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...