Python 如何在dataframe中基于列值(int)合并行(带字符串)?
我有这种格式的数据集Python 如何在dataframe中基于列值(int)合并行(带字符串)?,python,pandas,Python,Pandas,我有这种格式的数据集 df1= userid movieid tags timestamp 73 130682 b movie 1432523704 73 130682 comedy 1432523704 73 130682 horror 1432523704 77
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]
这样我就可以将所有标签合并在一起,以获得单词数或词频。
在排序中,我希望一个userid的所有标记都用“”连接在一起(一个空格),这样我还可以计算word/s的出现次数。我无法将标记中的字符串连接在一起。我能数一数单词及其出现的次数。如有任何帮助/建议,将不胜感激 首先计数并重新格式化每组计数的结果。将其作为中间结果:
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...