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

如何仅在与另一列组行值匹配时填充DataFrame列?

问题:DataFrame行值与指定列名匹配并保留已填充标记

需求概述

  • 遍历DataFrame的数字命名子集列,检查每行的值是否匹配目标列名列表(如['a','b','c','d'])
  • 实际数据集包含20+随机列,列顺序不固定,可能动态增减,需遍历所有行和列完成匹配
  • 匹配成功时在对应目标列标记x,未匹配时保留该列原有值(或pd.NA),禁止覆盖已填充的x标记

示例说明

  • 原始DataFrame:包含若干数字命名的列(如列1、列2、列3),每行仅包含单个字母值(如a、b、c)
  • 期望输出:新增a/b/c/d列,对应行的字母值与列名匹配时标记x,不匹配则为pd.NA;同一行的多个匹配标记需全部保留,不会被后续循环覆盖

尝试方案及问题

  • 最初尝试for循环结合iterrows(),但无法高效提取行值并与目标列名列表做对比
  • 参考方案后编写了如下代码,但存在覆盖已有标记的问题:
import pandas as pd

# 假设list为目标列名列表,num_col_list为数字列名列表
def checkCol(num_col):
    for letter_col in list:
        df[letter_col] = df[num_col].apply(lambda x: "x" if x == letter_col else pd.NA)

for num_col in num_col_list:
    checkCol(num_col)

问题核心:每次循环处理数字列时,会将目标列中已有的x标记覆盖为pd.NA,无法保留之前匹配成功的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:45:01