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

Pandas如何逐行比较DataFrame两列内容并输出指定列数据

解决方案

df['person-name'].equals(df['new-person'])方法仅返回单个布尔值,作用是校验两个Series整体的索引、值是否完全一致,无法生成逐行布尔筛选掩码,因此无法实现行级匹配筛选的效果。

要匹配「姓名分词顺序不同但指向同一实体」的记录,核心判断逻辑为:将两列的姓名字符串按空格拆分为分词列表,对分词列表排序后比对是否完全一致——顺序颠倒的姓名拆分排序后结果完全相同,可以被准确识别。

基础实现代码

# 生成逐行匹配的布尔掩码
match_mask = (
    df["person-name"].str.split().apply(sorted)
    == df["new-person"].str.split().apply(sorted)
)

# 筛选匹配行,仅保留指定4列
result = df.loc[match_mask, ["identifier", "person-name", "new-identifier", "new-person"]]

场景适配优化

如果数据中存在姓名大小写不统一的情况(例如Sidney Crosby和crosby sidney),可以先统一转为小写再做拆分匹配,避免漏判:

match_mask = (
    df["person-name"].str.lower().str.split().apply(sorted)
    == df["new-person"].str.lower().str.split().apply(sorted)
)

注意事项

  • 列名包含-等特殊符号时,必须使用df["列名"]的方括号语法访问列,不能使用df.列名的点访问语法,否则会被Python识别为减法运算,触发语法错误。
  • 上述逻辑默认姓名以空格作为分词分隔符,如果数据中存在多空格、特殊标点分隔姓名、带中间名的场景,可以先对姓名字段做针对性清洗,再执行匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:24:21