2017-01-31 27 views
1

我有数据集的格式如何基于Pandas数据框中的列值(int)合并行(带字符串)?

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] 

,这样我可以所有标签合并在一起字/秒计数或词频。 在排序中,我希望通过“”(一个空格)连接一个用户标识的所有标签,这样我还可以统计出每个字的出现次数。我无法将标记中的字符串连接在一起。我可以计算单词及其出现次数。任何帮助/建议,将不胜感激。

回答

1

首先计算每组的计数结果并重新格式化。把它作为中间结果:

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... 
+0

非常感谢!有效 ! –

相关问题