Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在dataframe中基于列值(int)合并行(带字符串)?_Python_Pandas - Fatal编程技术网

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