计算数据框列中每个单词的频率

时间:2019-05-06 07:04:45

标签: pandas dataframe pandas-groupby

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 个答案:

答案 0 :(得分:1)

Series.str.splitDataFrame.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

答案 1 :(得分:0)

好吧,您的结果是可以预期的,因为该列仅包含一个字符串(由几个词组成)。您要做的就是将此字符串拆分为一个列表:

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

In [5]: s.split(', ')                                                           
Out[5]: ['this', 'is', 'a', 'long', 'string', 'of', 'words']