如何基于movies与users DataFrame构建电影为行用户为列的m×u矩阵
报错原因
pivot()方法仅支持最多3个位置参数(分别对应行索引、列索引、填充值),你直接将users表的5个字段解包传入,参数数量不匹配自然报错。- 你当前仅持有
movies(电影维度表)、users(用户维度表)两张没有直接关联的表,缺少记录用户和电影交互关系的ratings评分表,本身就无法直接构建电影×用户矩阵。
正确实现步骤
- 准备关联用的评分表,表中至少包含
movie_id、UserID、rating三个核心字段,用来关联电影和用户两类数据。 - 数据关联后调用pivot方法生成矩阵,示例代码如下:
import pandas as pd # 合并评分表与电影表(可选,仅需要保留电影维度字段时操作) rating_full = ratings.merge(movies, on='movie_id', how='left') # 生成电影为行、用户为列的评分矩阵 movie_user_matrix = rating_full.pivot( index='movie_id', # 行用电影ID,也可替换为Title字段(需保证电影名无重复) columns='UserID', # 列用用户ID values='rating' # 矩阵填充值为评分,无评分的位置自动填充NaN )
- 若仅需要统计用户是否看过对应电影的布尔矩阵,无需合并其他表,直接用
crosstab方法更简便:
movie_user_matrix = pd.crosstab(index=ratings['movie_id'], columns=ratings['UserID'])
注:如果存在同一用户对同一部电影多次评分的情况,需使用
pivot_table方法指定aggfunc聚合规则避免报错,示例:movie_user_matrix = rating_full.pivot_table( index='movie_id', columns='UserID', values='rating', aggfunc='mean' # 重复评分取平均值 )
内容的提问来源于stack exchange,提问作者Vasudha Pasumarthi
相关产品推荐
相关产品推荐

