我有以下格式的数据集
df1=
userid movieid tags timestamp
73 130682 b movie 1432523704
73 130682 comedy 1432523704
73 130682 horror 1432523704
77 1199 Trilogy of the Imagination 1163220043
77 2968 Gilliam 1163220138
77 2968 Trilogy of the Imagination 1163220039
77 4467 Trilogy of the Imagination 1163220065
77 4911 Gilliam 1163220167
77 5909 Takashi Miike 1163219591
我想要另一个数据框的格式
df2=
userid tags
73 b movie[1] comedy[1] horror[1]
77 Trilogy of the Imagination[3] Gilliam[1] Takashi Miike[1]
这样我就可以将所有标签合并在一起以进行字数计数或术语频率。 在排序中,我希望一个用户 ID 的所有标签都通过“”(一个空格)连接在一起,这样我还可以计算单词出现的次数。我无法将标签中的字符串连接在一起。我可以计算单词及其出现次数。任何帮助/建议将不胜感激。
最佳答案
首先计数并重新格式化每组的计数结果。将其保留为中间结果:
r = df.groupby('userid').apply(lambda g: g.tags.value_counts()).reset_index(level=-1)
r
Out[46]:
level_1 tags
userid
73 b movie 1
73 horror 1
73 comedy 1
77 Trilogy of the Imagination 3
77 Gilliam 2
77 Takashi Miike 1
这个简单的字符串操作将为您提供每行的结果:
r.level_1+'['+r.tags.astype(str)+']'
Out[49]:
userid
73 b movie[1]
73 horror[1]
73 comedy[1]
77 Trilogy of the Imagination[3]
77 Gilliam[2]
77 Takashi Miike[1]
Python 的妙处在于能够用它做这样的事情:
(r.level_1+'['+r.tags.astype(str)+']').groupby(level=0).apply(' '.join)
Out[50]:
userid
73 b movie[1] horror[1] comedy[1]
77 Trilogy of the Imagination[3] Gilliam[2] Takas...
关于python - 如何根据 Pandas 数据框中的列值(int)合并行(带有字符串)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949507/