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

Python pandas如何提取某列中不在另外两列的值并存入新列

Pandas多列值比对提取第三列独有值

需求说明

  • 核心目标:对pandas DataFrame做多列值比对,提取第三列中未在前两列出现过的值,填充到指定结果列
  • 匹配规则:
    • 取Want_value、Unwanted_value两列的所有非空值,去重后构成比对基准值集合
    • 逐行匹配new_all_data列的取值,筛选出不在基准集合内的值
    • 将筛选得到的值填充到当前全为空的new_values列对应行,其余行保留空值
  • 示例预期结果:符合筛选规则的值为j、k

可复现测试数据

import pandas as pd
from numpy import nan

df = pd.DataFrame ({
    'Want_value': ['a', 'c', 'c', 'c', 'v', 'b', nan, nan, nan, nan, nan, nan, nan], 
    'Unwanted_value': ['r', 't', 't', 'z', 't', nan, nan, nan, nan, nan, nan, nan, nan], 
    'new_all_data': ['r', 'z', 'a', 'c', 't', 'v', 'b', 'j', 'r', 't', 'v', 'a', 'k'], 
    'new_values': [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]
})

数据结构参考截图:
数据示例

实现代码

用pandas原生向量化操作实现,执行效率高,逻辑清晰:

# 合并前两列非空值生成排除集合
exclude_vals = set(df['Want_value'].dropna()) | set(df['Unwanted_value'].dropna())

# 逐行判断填充new_values列,符合条件保留原值,不符合则置为空
df['new_values'] = df['new_all_data'].where(~df['new_all_data'].isin(exclude_vals), nan)

执行后new_values列会在new_all_data为j、k的两行保留对应值,其余行保持空值,完全匹配预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:12:19