You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python计算电影加权评分时出现name is not defined报错

报错原因

  1. 你在assign中直接写mean、count,Python会将其识别为全局变量,而你没有提前定义这两个变量,自然触发未定义报错。另外你之前聚合时给列命名的是大写的Mean、Count,即使要调用也需要用DataFrame列引用的写法,不能直接写列名当变量。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:54:07