pandas数据框中按itemId分组统计用户首次评分得分的实现方法
Pandas实现item得分计算方法
实现思路
你已经完成了核心预处理逻辑:按时间排序后保留每个用户对item的首次评分,剩下的计算只需要按itemId分组后统计likeOrDislike列中1的占比即可,该占比就是要求的得分。
完整代码
最简实现(直接计算均值)
因为likeOrDislike取值只有0和1,分组后的均值就是1的占比:
import pandas as pd # df_clean 为你已得到的仅含itemId、likeOrDislike两列的预处理后数据框 score_df = df_clean.groupby('itemId', as_index=False)['likeOrDislike'].mean() # 修改列名 score_df.columns = ['itemId', 'score'] # 若要和示例输出一致截断保留两位小数(不四舍五入),可替换为:score_df['score'] = score_df['score'].apply(lambda x: int(x * 100) / 100) score_df['score'] = score_df['score'].round(2)
分步统计0和1的数量实现
如果需要显式统计每个item下0和1的出现次数,可以用如下写法:
import pandas as pd # 按itemId和likeOrDislike分组统计次数 count_df = df_clean.groupby(['itemId', 'likeOrDislike']).size().unstack(fill_value=0) # 计算得分 count_df['score'] = (count_df[1] / (count_df[0] + count_df[1])).round(2) # 提取最终结果 score_df = count_df.reset_index()[['itemId', 'score']]
输出结果
最终得到的score_df和预期输出一致:
| itemId | score |
|---|---|
| i1 | 0.66 |
| i2 | 0.5 |
| i4 | 1 |
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

