Как вернуть список, если они существуют в обоих файлах csv

У меня есть 2 CSV-файла, news.csv (основной файл CSV) и dictionary1.csv Я могу узнать, существует ли термин в news.csv в любом из словаря CSVs, возвращая 1 для существующего и 0 для не существует ниже приведены мои коды:

news=pd.read_csv("news.csv")
dictionary=pd.read_csv("dictionary1.csv")

pattern='|'.join(dictionary['Lists'])

news["exist/not exist"] = np.where(
    news["STORY"].str.contains(pattern, na=False, case=False),
    1, 0
)

Но я не мог понять, как я могу вернуть списки, которые совпадают с 2 CSV. Ниже мой образец news.csv

ID  STORY
1   The weather today is Sunny, but tomorrow it is expected to be rainy
2   In  UK, there are 4 seasons, winter,summer, autumn and spring
3   Food is essential in life

Мой пример dictionary1.csv

Lists
Sunny
Rainy
Winter
Summer
Spring
Autumn

Вывод, который я хотел

ID  STORY                                                                  exist/not exist    similar
1   The weather today is Sunny, but tomorrow it is expected to be rainy         1              sunny, rainy
2   In  UK, there are 4 seasons, winter,summer, autumn and spring               1              winter,summer,autumn,spring
3   Food is essential in life                                                   0               -

Всего 1 ответ


Сначала необходимо экранировать строки с re.escape для правильного разбора специальных символов регулярных выражений, а затем добавляется /b/b для границ слов - извлекаемые значения между пробелами.

Затем используйте Series.str.findall с re.I для игнорирования прописных и строчных Series.str.join а затем добавьте Series.str.join :

import re

pattern = '|'.join(r"{}".format(re.escape(x)) for x in dictionary['Lists'])

news['similar'] = news["STORY"].str.findall(pattern, flags=re.I).str.join(', ')
print (news)
   ID                                              STORY  exist/not exist  
0   1  The weather today is Sunny, but tomorrow it is...                1   
1   2  In  UK, there are 4 seasons, winter,summer, au...                1   
2   3                          Food is essential in life                0   

                          similar  
0                    Sunny, rainy  
1  winter, summer, autumn, spring  
2                                  

Или преобразуйте оба значения в нижний регистр с помощью Series.str.lower :

news['similar'] = news["STORY"].str.lower().str.findall(pattern.lower()).str.join(', ')
print (news)
   ID                                              STORY  exist/not exist  
0   1  The weather today is Sunny, but tomorrow it is...                1   
1   2  In  UK, there are 4 seasons, winter,summer, au...                1   
2   3                          Food is essential in life                0   

                          similar  
0                    sunny, rainy  
1  winter, summer, autumn, spring  
2