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

基于两个DataFrame计算物品平均评分与用户评分一致性的方法咨询

问题1:生成包含物品平均评分与等级的DataFrame

假设你已有的用户评分表名为df_rating,物品属性表名为df_item,实现代码如下:

import pandas as pd

# 计算每个物品的平均评分
item_avg = df_rating.groupby('item', as_index=False)['rating'].mean().rename(columns={'rating':'average_rating'})
# 关联物品等级字段,how参数可按需调整:
# inner:仅保留两个表共有的物品;outer:保留两边所有物品,缺失值自动填充NaN
result = pd.merge(item_avg, df_item[['item', 'grade']], on='item', how='inner')

运行后得到的result就是你需要的结构。

问题2:用户评分与物品标注等级一致性计算

你提到的用列表存储字段的方案完全可行,pandas支持object类型存储列表数据,具体实现步骤如下:

  1. 先将物品等级映射为数值(Good→1,Bad→0)
  2. 给每条用户评分记录关联上对应物品的数值等级
  3. 按用户分组,将评分和对应等级分别聚合为列表
  4. 计算两个列表对应值相等的比例,即为一致性得分

实现代码如下:

# 1. 生成等级的数值映射
df_item['grade_num'] = df_item['grade'].map({'Good': 1, 'Bad': 0})

# 2. 给评分表关联物品数值等级,inner会自动过滤掉没有等级标注的评分记录
df_combined = pd.merge(df_rating, df_item[['item', 'grade_num']], on='item', how='inner')

# 3. 按用户分组聚合成列表
user_result = df_combined.groupby('user', as_index=False).agg(
    reviews_given = ('rating', list),
    item_grades = ('grade_num', list)
)

# 4. 计算一致性得分
user_result['consistency'] = user_result.apply(
    lambda row: sum(a == b for a, b in zip(row['reviews_given'], row['item_grades'])) / len(row['reviews_given']),
    axis=1
)

如果需要保留没有等级标注的评分记录,可以将merge的how参数改为left,之后自行处理缺失的grade_num值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:36:02