如何解决Python计算电影加权评分时出现name is not defined报错
报错原因
- 你在
assign中直接写mean、count,Python会将其识别为全局变量,而你没有提前定义这两个变量,自然触发未定义报错。另外你之前聚合时给列命名的是大写的Mean、Count,即使要调用也需要用DataFrame列引用的写法,不能直接写列名当变量。 mean(mean)的写法完全错误,全数据集平均评分C需要提前基于原始数据计算,不能这样嵌套调用。
修正后完整代码
import pandas as pd # 1. 先计算全数据集的平均评分C,注意你原始表的评分列是rating,如果实际列名是ratings自行修改 C = df['rating'].mean() # 2. 聚合统计每部电影的评分数量、平均分,同时把movieId和year从索引转为普通列 avg_rating = df.groupby(['movieId','year'])['rating'].agg( [('count', 'size'), ('mean', 'mean')] ).sort_values(by='mean', ascending=False).reset_index() # 3. 定义加权评分函数 def weighted_rating(R, v, m, C): return (v/(v+m))*R + (m/(v+m))*C # 4. 计算加权分,m为最小评分数量阈值,可根据你的全量数据规模调整,采样测试可先设为10 m = 10 avg_rating = avg_rating.assign( wr = lambda x: weighted_rating(x['mean'], x['count'], m, C) )
运行完成后avg_rating就包含你需要的movieId、year、count、mean、wr五个字段。
内容的提问来源于stack exchange,提问作者hk2
相关产品推荐
相关产品推荐

