如何用pandas.merge关联df3与df,为每条评分记录匹配电影详情?
电影推荐系统:Pandas数据框合并解决方案
正确合并代码
要实现保留df3全部行、匹配df中电影详情的需求,**左连接(left join)**是精准的解决方案,以下是可靠实现代码:
import pandas as pd # 核心逻辑:按电影ID列左连接,完全保留df3的所有行 merged_df = df3.merge(df, on='id', how='left')
你的尝试失败原因分析
join方法适配问题:join默认按索引合并,若df的id列不是索引,会直接匹配失败;且当两表存在重复列名时,未指定后缀会触发冲突报错。- 错误使用
right连接:how='right'会保留df的所有行,最终行数与df一致,完全不符合你要和df3行数相同的需求。 suffixes=None参数违规:当两表存在连接列之外的同名列时,suffixes必须指定后缀(如('_left', '_right')),设为None会直接抛出参数错误。
额外排查步骤
如果上述代码仍未解决问题,检查以下两个关键点:
- 列名一致性:确认
df3和df中存储电影ID的列名是否完全一致(比如df3是movie_id,df是id),若不一致需显式指定:merged_df = df3.merge(df, left_on='movie_id', right_on='id', how='left') - 去重
df中的电影ID:若df存在重复的电影ID记录,合并后行数会超过df3,需先对df去重:df = df.drop_duplicates(subset='id', keep='first') merged_df = df3.merge(df, on='id', how='left')
结果验证
合并后执行以下代码确认行数符合要求:
print(len(merged_df) == len(df3)) # 返回True则表示符合需求
内容的提问来源于stack exchange,提问作者Omer Sheinbox
相关产品推荐
相关产品推荐

