Я столкнулся с проблемой, которую не могу решить. Выполнили обязательный поиск в Google и не смогли найти подходящего решения. Это может быть просто (на это я надеюсь):
У меня есть Python dataframe (case_content) со следующими 4 столбцами. case_content = case_content[[‘CASE_NUMBER','CASE_HEADLINE','CASE_DESCRIPTION','wordFound']]
Последний столбец (wordFound
) пуст.
Затем у меня есть список ключевых слов (называемых StringOne - StringTen): wordList =[*'StringOne','StringTwo','StringThree','StringFour','StringFive','StringSix','StringSeven','StringSix','StringSeven','StringEight','StringNine','StringTen'*]
В моем dataFrame я хочу для поиска в каждом поле CASE_DESCRIPTION в каждой строке, чтобы увидеть, присутствует ли одно из ключевых слов из WordList. Для этого я использую строку ниже: case_content.loc[case_content['CASE_DESCRIPTION'].str.contains('|'.join(wordList)), 'wordFound'] = 'match found in description'
Как видите, я назначаю стандартную строку ' совпадение, найденное в описании ' в столбце wordFound, если совпадение найдено в CASE_DESCRIPTION столбец. Кажется, это нормально работает. При выполнении print(case_content)
я получаю результат, похожий на этот:
CASE_NUMBER CASE_HEADLINE CASE_DESCRIPTION wordFound
345 [title here] [Description here] match found in description
644 [title here] [Description here] match found in description
765 [title here] [Description here] match found in description
803 [title here] [Description here] match found in description
Однако на самом деле я хочу получить, это добавить определенные c совпадающие слова (разделенные запятой), в wordFound colomn, - вот так:
CASE_NUMBER CASE_HEADLINE CASE_DESCRIPTION wordFound
345 [title here] [Description here] StringTwo, StringFour, StringSix
644 [title here] [Description here] StringTwo, StringTen
765 [title here] [Description here] StringThree, StringSeven
803 [title here] [Description here] StringFive, StringEight, StringNine
На самом деле я разработал решение ранее, используя вложенный подход iterows (), где я бы перебирал фрейм данных, а затем для каждой строки перебирал каждое слово, чтобы посмотрите, есть ли совпадение в каждом CASE_DESCRIPTION. Затем внутри l oop я добавил ключевое слово (а) возможного соответствия в столбец wordFound (разделенный запятой). Однако этот подход был более или менее бесполезен, поскольку мой dataFrame имеет длину более 20 000 строк, а поле Description может содержать, возможно, 500 слов или более. Таким образом, с циклическим подходом на прохождение всего потребуется около +10 минут.
С подходом str.contains () кажется, что я могу пройти все за 5-10 секунд. что абсолютно приемлемо в моем случае использования. Мне просто нужно выяснить, как добавить фактически найденные слова вместо стандартного предложения, как описано.
Надеюсь, что кто-то может мне помочь.
Заранее спасибо,