如何仅在与另一列组行值匹配时填充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
相关产品推荐
相关产品推荐

