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

使用Pandas校验多列姓名字段是否存在于全名字段并统计匹配数

Pandas 逐行校验名字字段并统计符合记录数实现逻辑

校验规则说明

逐行匹配满足以下全部条件的记录,计入有效统计:

  • 该行FIRST_NAME、LAST_NAME(若存在中间名字段则一并纳入校验)中至少有1个非空值
  • 所有非空的名字字段值,均能在同一行的FULL_NAME字段中完整匹配存在

测试数据构造

先构建与题给样例完全一致的测试DataFrame:

import pandas as pd

# 构造样例数据
data = {
    "FULL_NAME": ["Joe Bloggs", "Greg", "Larson", "Emily Sun", "Clara Zen", "Justin Tim"],
    "FIRST_NAME": ["Joe", None, "Larson", None, None, "Justin"],
    "LAST_NAME": ["Bloggs", "Greg", None, None, None, "Tim"]
}
df = pd.DataFrame(data)

逐行校验代码实现

  1. 定义单行校验函数,支持灵活扩展校验的名字列(如需加入中间名字段,仅需修改校验列列表即可):
def validate_row(row, check_column_list):
    # 提取当前行所有待校验字段的非空值
    non_empty_name_list = row[check_column_list].dropna().tolist()
    # 无有效非空名字直接判定为无效
    if not non_empty_name_list:
        return False
    # 校验所有非空名字是否都在FULL_NAME中
    full_name_content = row["FULL_NAME"]
    return all(name in full_name_content for name in non_empty_name_list)
  1. 执行逐行校验并统计有效记录数:
# 指定需要参与校验的名字列,有中间名列时可追加到列表中
check_cols = ["FIRST_NAME", "LAST_NAME"]
# 逐行生成校验结果
df["is_valid"] = df.apply(lambda x: validate_row(x, check_cols), axis=1)
# 统计有效记录总数
valid_total = df["is_valid"].sum()

结果与注意事项

  • 执行上述代码后,valid_total的输出值为4,与预期统计结果完全一致。

可选调整:若需忽略大小写匹配,可在校验前将full_name_content和每个name统一转为小写/大写后再做包含判断。
注意:若实际业务数据中空值为空白字符串格式,需先执行df.replace("", pd.NA, inplace=True)完成空值统一转换,避免校验逻辑误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 23:45:07