繁体   English   中英

如何根据 Pandas 数据框中的列值(int)合并行(带字符串)?

[英]How to merge rows (with strings) based on column value (int) in Pandas dataframe?

我有格式的数据集

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 的所有标签都用“”(一个空格)连接在一起,这样我还可以计算 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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM