使用Python实现:判断列值是否存在于另一列并生成匹配新列
Python pandas 实现方案
核心逻辑以给出的输出示例为准:
- 先提取两列的非空值集合,区分colA独有值、colB独有值、两列共有值
new_colA填充规则:逐行判断,若当前行colA/colB的取值属于「colA独有值 + 两列共有值」集合,就填入该值,否则填空字符串new_colB填充规则:逐行判断,若当前行colB的取值属于「colB独有值」集合,就填入该值,否则填空字符串
完整实现代码
import pandas as pd # 1. 构造示例初始数据 df = pd.DataFrame({ 'colA': ['x', 'y', '', '', '', 'd', ''], 'colB': ['', '', 'c', 'd', 'x', '', ''] }) # 2. 提取两列非空值集合 set_A = set(df[df['colA'] != '']['colA']) set_B = set(df[df['colB'] != '']['colB']) # 3. 定义两列的匹配值范围 match_A = set_A # new_colA匹配colA所有非空值(含独有+两列共有) match_B = set_B - set_A # new_colB仅匹配colB独有的非空值 # 4. 逐行生成新列 df['new_colA'] = df.apply( lambda row: row['colA'] if row['colA'] in match_A else (row['colB'] if row['colB'] in match_A else ''), axis=1 ) df['new_colB'] = df.apply( lambda row: row['colB'] if row['colB'] in match_B else '', axis=1 ) # 打印结果验证 print(df)
输出结果验证
运行代码后输出与预期完全一致:
colA colB new_colA new_colB 0 x x 1 y y 2 c c 3 d d 4 x x 5 d d 6
如果实际数据中空值是pandas的
NaN而非空字符串,把集合提取和判断逻辑里的!= ''替换为pd.notna()即可。
内容的提问来源于stack exchange,提问作者user19266212
相关产品推荐
相关产品推荐

