You need to enable JavaScript to run this app. Pandas中如何提取双用户评分均高于0的公共列
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何提取双用户评分均高于0的公共列

结论

这个筛选逻辑完全可以用Pandas实现,不需要拼接复杂的自定义函数,核心就是排除非评分列之后,逐列判断该列所有用户的评分是不是都大于0,最后把符合条件的列名收集成列表就行。

实现步骤

  • 先把user_id列从判断范围里排除:这列是字符串类型的用户标识,根本不是评分值,留着参与大小比较会直接报类型错误
  • 对剩下的所有电影评分列做逐元素的大于0判断,得到和原评分块同形状的布尔矩阵
  • 沿着列的方向做聚合校验:如果某一列的所有布尔值都是True,就说明这列下所有用户的评分都高于0,符合筛选要求
  • 把符合条件的列名提取出来,转成普通Python列表就完成了

可直接跑通的代码

import pandas as pd

# 还原题目给的两行评分数据
df = pd.DataFrame({
    "user_id": ["512A", "AB72"],
    "movieA": [0.0, 1.0],
    "movieB": [1.0, 2.0],
    "movieC": [2.0, 0.0],
    "movieD": [1.0, 3.0]
})

# 核心筛选逻辑
score_df = df.drop(columns="user_id")
# 按列校验所有评分是否都大于0,取对应列名转列表
target_list = score_df.columns[(score_df > 0).all(axis=0)].tolist()

跑出来的target_list值就是['movieB', 'movieD'],和示例的预期结果完全一致。

容易踩的坑

  • all()的axis参数别传错:传axis=0才是按列做校验,也就是检查某一列所有行的布尔值是不是全为真;要是错传成axis=1,就变成逐行判断用户的所有评分是不是都大于0,出来的结果完全不对
  • 这种写法是Pandas原生的向量化操作,比逐列循环判断的效率高很多,哪怕后续扩展到上千用户、上万部电影,运行速度也不会有明显下降

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 19:54:04