Подсчет частоты каждого слова в столбце данных - PullRequest
0 голосов
/ 06 мая 2019

enter image description here У меня есть следующий пример данных. Он содержит информацию о каждом пользователе, его отзывы разделены на слова (разделенные запятыми) и количество слов в каждом обзоре

Я хотел сгруппировать данные, используя частоту слов в ['tokens'] для каждого пользователя, чтобы я мог получить следующий результат

enter image description here

Я использовал следующий код count = user_tokens_aggregated.groupby(['username','tokens']).count() print(count)

Но мне следовало бы получить следующий результат, как если бы он обрабатывал каждый отзыв как ОДНУ ЧАСТЬ (отсюда и результат = 1 для всех строк), а не каждый отзыв как состоящий из нескольких слов

enter image description here

Есть предложения?

Ответы [ 2 ]

1 голос
/ 06 мая 2019

Используйте Series.str.split с DataFrame.stack для нового DataFrame и затем агрегируйте по DataFrameGroupBy.size:

df = pd.DataFrame({
         'tokens':['hotel, night','hotel','hotel'],
         'username':list('aab')
})

df = (df.set_index('username')['tokens']
       .str.split(',', expand=True)
       .stack()
       .rename('username')
       .reset_index(name='tokens'))
print (df)
  username  level_1  tokens
0        a        0   hotel
1        a        1   night
2        a        0   hotel
3        b        0   hotel

count = df.groupby(['username','tokens']).size().reset_index(name='token_count')
print (count)
  username  tokens  token_count
0        a   night            1
1        a   hotel            2
2        b   hotel            1
0 голосов
/ 06 мая 2019

Ну, ваш результат ожидается, потому что столбец содержит только одну строку (из нескольких слов). Что вы хотите сделать, это разбить эту строку на список:

In [4]: s = "this, is, a, long, string, of, words"                              

In [5]: s.split(', ')                                                           
Out[5]: ['this', 'is', 'a', 'long', 'string', 'of', 'words']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...