You need to enable JavaScript to run this app. pandas 中如何依据指定行取值筛选对应列子集构建新DataFrame
优惠活动
大模型
产品
解决方案
定价
更多

pandas 中如何依据指定行取值筛选对应列子集构建新DataFrame

核心实现逻辑

这套需求不需要手动逐列循环遍历,核心判断规则是:基于指定用户的行取值做非空校验,只保留该用户给出过评分的对应电影列,同时完整保留所有用户行的原有评分数据。

具体操作步骤

  1. 定位指定用户对应的行数据
    直接通过pandas的行索引取值,比如目标用户行索引为0,执行df.loc[0]即可拿到该用户对所有电影的评分序列。
  2. 校验行内非空值,提取目标列名
    对拿到的用户评分序列调用notna()方法,生成同长度的布尔掩码:掩码值为True的位置,对应用户给出过评分的电影列;值为False的位置,对应用户未评分的电影列。
    从布尔掩码中提取值为True的列名集合,就是新表需要保留的列。
  3. 基于列名集合截取原DataFrame,生成新表
    用提取到的列名索引原DataFrame,即可得到符合要求的结果表。

可直接复用的代码

# 原始DataFrame对象命名为df
target_user_idx = 0  # 替换为实际需要指定的目标用户行索引
# 获取目标用户的评分行数据
user_rating_row = df.loc[target_user_idx]
# 筛选该用户非空评分对应的列
keep_cols = user_rating_row[user_rating_row.notna()].index
# 生成筛选后的新DataFrame
new_df = df[keep_cols]

注意事项

  • 如果遇到目标用户所有评分为空的场景(比如示例中行索引为4的用户),上述代码会返回无任何数据列的空DataFrame,可以按需增加判断逻辑,比如检测到keep_cols长度为0时给出提示,避免后续数据操作报错。
  • 该实现是pandas原生向量化操作,相比手动逐列遍历判断的效率更高,尤其当电影列数规模较大时性能优势更明显。
  • 生成的新表会完整保留所有原始用户行的评分信息,仅过滤掉目标用户未评分的列,和示例给出的期望输出结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 18:06:05