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

标签 python pandas

我有以下格式的数据集

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/

相关文章:

python - UDP 连接没有收到来自服务器的任何回复 - Python(也可能使用 boost 的 C++)

Python删除列表字典中的重复项

python - 如何从 pandas 数据框中列的第二个值附加到字典

python - Pandas 中的矢量化计算

python - 合并具有许多稀疏列的两个 Pandas DataFrame 会导致 DataFrame 需要不成比例的大量内存

python - 从父模板访问 django 上下文变量

python - 不确定如何启用此 if 和 else 语句来显示正确的字符串

python - 如何从包含列表的 Pandas 列中进行一次热编码?

python - 在 Python 中通过 pyarrow 和(或)pandas 构建 parquet 的列

python - tensorflow.python.framework.errors_impl.NotFoundError : Failed to create a directory: training/export\Servo\temp-b'1576742954'