Сравните список слов с сериями - PullRequest
0 голосов
/ 22 октября 2019

У меня есть список слов, и у меня есть большие серии, и я хочу сравнить каждое слово в списке с тем, во сколько строк появляется каждое слово.

def example(word_list, Series):
   df['0'].value_counts()

Насколько я получил, выше которогоучитывает только общее количество слов, а не количество строк, в которых появляется каждое слово в списке. пример

- 6 строк

дом - 2 строки

Ответы [ 4 ]

1 голос
/ 22 октября 2019
df = pd.DataFrame(columns=['data'], data=['what are you doing', 'give me the the file', 'the sun comes up up', 'you and me'])
word_list = ['the', 'up', 'me']
df['words'] = df['data'].str.split().apply(lambda i: list(set(i))) # making sure a word occurs only once per row
all_words = [i for j in df['words'].values.tolist() for i in j]
d = {}
for i in word_list:
    d[i] = all_words.count(i)

d
{'the': 2, 'up': 1, 'me': 2}

Даже если есть три вхождения 'the', только два вхождения строки, поэтому вывод равен 2

1 голос
/ 23 октября 2019

Использование настройки @Ram:

df = pd.DataFrame(columns=['data'], data=['what are you doing', 'give me the the file', 'the sun comes up up', 'you and me'])
word_list = ['the', 'up', 'me']

df['data'].str.split(expand=True).stack().groupby(level=0)\
 .apply(lambda x: x.drop_duplicates().value_counts())\
 .sum(level=1)[word_list]

Вывод:

the    2
up     1
me     2
dtype: int64

Или использование настройки @Alex:

data = np.array(['hello friend','this','is Anna coming?','hello there!'])

ser = pd.Series(data)

my_l = ['hello', 'is']

ser.str.split(expand=True).stack().groupby(level=0)\
     .apply(lambda x: x.drop_duplicates().value_counts())\
     .sum(level=1)[my_l]

Вывод:

hello    2
is       1
dtype: int64
1 голос
/ 22 октября 2019

Попробуйте что-то вроде этого:

import pandas as pd
import numpy as np

data = np.array(['hello friend','this','is Anna coming?','hello there!'])

ser = pd.Series(data)


my_l = ['hello', 'is']
d = {}
for word in my_l:

  count = 0

  for s in ser:
    if (' ' + word + ' ') in (' ' + s + ' '):
      count = count +1
  d[word] = count

print (d)

output

{'hello': 2, 'is': 1}
0 голосов
/ 23 октября 2019

а как же просто:

{word:series.str.contains(word).sum() for word in word_list}?

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