Панды: проверить значения в столбце A, содержащемся в столбце B - PullRequest
0 голосов
/ 18 мая 2018

У меня есть 100 ключевых слов в df1 и 10000 статей в df2.Я хочу подсчитать, сколько статей содержат определенное ключевое слово.Например, около 20 статей содержат ключевое слово «яблоко».

Я пытаюсь использовать df.str.contains (), но мне нужно вычислить каждое ключевое слово.Можете ли вы сказать мне эффективный способ?

df1=pd.DataFrame(['apple','mac','pc','ios','lg'],columns=['keywords'])


df2=pd.DataFrame(['apple is good for health','mac is another pc','today is sunday','Star wars pc game','ios is a system,lg is not','lg is a japan company '],columns=['article'])

результат:

1 artricl contain "apple"
1 article contain 'mac'
2 article contain 'pc'
1 article contain "ios"
2 article contain 'lg'

1 Ответ

0 голосов
/ 18 мая 2018

Я думаю, нужно str.contains для логических рядов с sum для подсчета True с, которые являются процессами типа 1 с, для всех keywords используйте list comprehension с DataFrame contructor:

L = [(x, df2['article'].str.contains(x).sum()) for x in df1['keywords']]
#alternative solution
#L = [(x, sum(x in article for article in df2['article'])) for x in df1['keywords']]
df3 = pd.DataFrame(L, columns=['keyword', 'count'])
print (df3)
  keyword  count
0   apple      1
1     mac      1
2      pc      2
3     ios      1
4      lg      2

Если требуется только вывод на печать:

for x in df1['keywords']:
    count =  df2['article'].str.contains(x).sum()
    #another solution if no NaNs with sum, generator and check membership by in
    #count =  sum(x in article for article in df2['article'])
    print ('{} article contain "{}"'.format(count, x))

1 article contain "apple"
1 article contain "mac"
2 article contain "pc"
1 article contain "ios"
2 article contain "lg"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...