Как получить ключевое слово, которое было найдено из списка ключевых слов при поиске в каждой строке кадра данных? - PullRequest
1 голос
/ 07 октября 2019

У меня есть столбец "Описание" в моем фрейме данных, и я ищу в этом столбце список ключевых слов. Я смог вернуть значения True или False, если ключевое слово присутствует в конкретной строке. Я хочу добавить еще один столбец, который показывает, какое ключевое слово из списка было сопоставлено с данными в этой строке.

, например:

content = ['paypal', 'silverline', 'bcg', 'onecap']

#dataframe df

Description        Debit  Keyword_present 

onech xmx paypal    555     True
xxl 1ef yyy         141     False
bcg tte exact       411     True

И новый столбец должен выглядеть следующим образом:

 Keyword
 paypal
 NA
 bcg

До сих пор я пытался получить значения T / F при наличии ключевых слов.

#content is my list of keywords

present = new_df['Description'].str.contains('|'.join(content)) 

new_df['Keyword Present'] = present

Ответы [ 2 ]

3 голосов
/ 07 октября 2019

Вместо contains используйте extract с несколько другим шаблоном:

pattern = '(' + '|'.join(content) + ')'
df['Keyword Present'] = df.Description.str.extract(pattern)

Вывод:

        Description  Debit  Keyword_present Keyword Present
0  onech xmx paypal    555             True          paypal
1       xxl 1ef yyy    141            False             NaN
2     bcg tte exact    411             True             bcg
0 голосов
/ 07 октября 2019

Если ваши значения в description всегда разделены пробелами, вы можете использовать что-то вроде

content = ['paypal', 'silverline', 'bcg', 'onecap']
content = set(content)

df['keyword_matched'] = df['Description'].apply(lambda x: set(x:x.split(' ')).intersection(content)

. Это вернет установленный объект, который вы можете изменить по своему усмотрению.

Одним из преимуществ этого метода может быть то, что он может дать несколько совпадающих строк,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...