【问题标题】:How can I use CountVectorizer with aggregated data?如何将 CountVectorizer 与聚合数据一起使用?
【发布时间】:2019-12-18 21:30:50
【问题描述】:

我正在使用goodbooks-10k dataset 来制作推荐系统。我想使用书籍的标签来提出建议。书的标签以一种加重的方式出现 - 对于每本书和每个标签,都有一行包含书名、标签名称以及此标签在这本书中出现的次数。 数据集如下所示:

我想使用这些信息来构建标签的词袋表示,其中对于每个标签,我都有一个列,其中包含该标签在给定书籍中出现的次数。

用 pandas 实现这一点的正确方法是什么?

提前致谢!

【问题讨论】:

  • 图片链接很有用,但由于它比较简单,您能否将数据剪切并粘贴到您的问题中,以便我们快速参考?您可以使用 3 个反引号 ``` 来制作代码/数据块。
  • dt.tag_id.value_counts()

标签: python pandas dataframe scikit-learn one-hot-encoding


【解决方案1】:

您可以使用pandas.pivot_table

示例数据框:

df= pd.DataFrame({"book_id": [1,1,2,2,3], "tag_id": [100, 120, 130, 140, 150], "tag_count": [100, 200, 300, 400, 500]})

# df

#   book_id tag_id  tag_count
#  0    1    100    100
#  1    1    120    200
#  2    2    130    300
#  3    2    140    400
#  4    3    150    500
df.pivot_table(values="tag_count", index="book_id", columns="tag_id", aggfunc="sum", fill_value=0)

输出:

# tag_id    100 120 130 140 150
# book_id                   
#  1    100 200 0   0   0
#  2    0   0   300 400 0
#  3    0   0   0   0   500

【讨论】:

  • 谢谢!但是,当我这样做时,新数据框只有 812 行,但旧数据框包含 10,000 本书。我有:books_with_tags = pd.merge(b, tags_join_DF, left_on='book_id', right_on='goodreads_book_id', how='outer')books_with_tags["book_id"].value_counts() 的长度为 10000。但 books_with_tags.pivot_table(values="count", index="book_id", columns="tag_name", aggfunc="sum", fill_value=0) 之后的新数据帧只有 812 行。你知道这是为什么吗?
  • 使用 pivot_table 传播数据帧后,行中的大部分信息将传输到列,因此较少。的行。在上面的回答中,旋转后你只得到 3 行而不是原来的 5 行。但所有信息仍然保留
猜你喜欢
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
相关资源
最近更新 更多