我有以下示例数据框。它包含有关每个用户的信息,其评论分为单词(用逗号分隔)和每个评论中的单词数
我想使用['tokens']中每个用户的词频对数据进行分组,以便获得以下结果
我使用了以下代码
count = user_tokens_aggregated.groupby(['username','tokens']).count()
print(count)
但是我应该得到以下结果,好像它会将每个评论作为一个片段处理(因此,所有行的结果= 1)而不是每个评论都由多个单词组成
有什么建议吗?
答案 0 :(得分:1)
将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
答案 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']