如何判断列值是否存在于另一列 不存在值存入新列并生成状态
基于Pandas的实现方法
处理这类空格分隔字符串的列匹配问题,用Pandas逐行计算集合差集即可,步骤清晰且易维护。
处理逻辑
- 逐行将
col1、Col2的字符串按空格拆分为值集合,自动忽略多余的首尾空格、连续空格 - 计算
col1集合对Col2集合的差集(即仅在col1中出现、未在Col2中出现的编码)- 差集非空:
status设为yes,o/p value为差集内编码按空格拼接的字符串 - 差集为空:
status设为No,o/p value填充None
- 差集非空:
可直接运行的代码
import pandas as pd # 替换为你的数据读取逻辑,比如pd.read_csv("你的文件.csv") df = pd.DataFrame({ "col1": [ "10713-251-NODIV 10713-347-NODIV 10713-234-NODIV", "10713-251-NODIV 10713-347-NODIV" ], "Col2": [ "10713-251-NODIV 10713-347-NODIV", "10713-251-NODIV 10713-347-NODIV" ] }) def get_match_result(row): col1_vals = set(str(row["col1"]).split()) col2_vals = set(str(row["Col2"]).split()) diff_vals = col1_vals - col2_vals if diff_vals: # 加sorted是为了固定输出编码顺序,不需要可删除 return pd.Series(["yes", " ".join(sorted(diff_vals))]) return pd.Series(["No", None]) df[["status", "o/p value"]] = df.apply(get_match_result, axis=1)
验证结果
运行后输出结果和给出的示例完全匹配:
col1 Col2 status o/p value 0 10713-251-NODIV 10713-347-NODIV 10713-234-NODIV 10713-251-NODIV 10713-347-NODIV yes 10713-234-NODIV 1 10713-251-NODIV 10713-347-NODIV 10713-251-NODIV 10713-347-NODIV No None
优化说明
- 代码中加入
str()转换是为了兼容列中存在空值、数值类型值的异常场景,避免运行报错 - 如果数据量超过10万行,可以把apply逻辑替换为列表推导式,运行速度能提升3~5倍,核心判断逻辑不变
- 如果需要保留col1中原有值的输出顺序,可以把集合操作替换为列表遍历判断,不需要排序即可按原顺序输出未匹配的编码。
内容的提问来源于stack exchange,提问作者parag
相关产品推荐
相关产品推荐

