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

函数未返回指定数量观测值:获取用户Top N高评分电影异常问题

解决办法:修正评分筛选逻辑

我来帮你排查下代码里的问题——你的逻辑卡在了分组和数据筛选的顺序上,导致head(n_rows)没有按你预期的方式工作:

你的代码里的核心问题

  1. 冗余的数据集操作:data_.loc[user.index]和你已经筛选好的user变量完全一致,这一步是多余的。
  2. groupby后head()的逻辑错误:当你对电影标题分组后调用head(n_rows),它会给每个电影分组都取前n_rows行,而不是从用户的所有评分里挑出前n_rows个高分项,这就是为什么你会得到用户所有评分电影的原因。
  3. 排序时机错误:你先取了部分数据再排序,这会导致结果不是按评分从高到低的优先级筛选的。

针对需求的两种修正方案

根据你的需求(展示用户评分最高的n部电影),分两种场景给出解决方案:

场景1:用户可能对同一部电影多次评分,需要展示每部电影的最高评分,再取前n部

如果用户给同一部电影打过分次,你想先保留每部电影的最高评分,再挑出评分最高的前n部:

def top_movies(data_, usr, n_rows = 10):
    # 第一步:筛选出该用户的所有评分记录
    user_ratings = data_[data_['user_id'] == usr]
    # 第二步:按电影分组,提取每部电影的最高评分,重置索引变回DataFrame
    movie_top_ratings = user_ratings.groupby('title')['rating'].max().reset_index()
    # 第三步:按评分降序排序,取前n_rows条结果
    final = movie_top_ratings.sort_values(by='rating', ascending=False).head(n_rows)
    return final

def ex9():
    return top_movies(data, 1, 30)

ex9()

场景2:不需要去重,直接取用户所有评分记录里评分最高的前n条

如果允许同一部电影多次出现在结果里(比如用户给某部电影打了多次高分,都想展示),可以简化逻辑:

def top_movies(data_, usr, n_rows = 10):
    # 筛选用户评分后直接按评分降序排序,取前n_rows条
    user_ratings = data_[data_['user_id'] == usr]
    final = user_ratings.sort_values(by='rating', ascending=False).head(n_rows)
    return final

def ex9():
    return top_movies(data, 1, 30)

ex9()

这两种方案都能精准返回你预期的前30行最高评分数据,你可以根据实际的业务需求选择对应的版本。

内容的提问来源于stack exchange,提问作者programmerA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:17:20