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

基于部分匹配提取重复行相同信息 实现pandas affiliation字段去重

pandas实现affiliation字段部分匹配去重的方案

核心思路

先按id和name字段分组,对每组内的affiliation字符串做相似度匹配,将相似度高于设定阈值的条目判定为重复项,仅保留一条;如果需要提取公共字符串作为标准值,可额外对重复项做分词去停用词后取交集拼接。

实现代码

首先安装依赖库(用于字符串相似度计算):
pip install fuzzywuzzy python-Levenshtein

完整代码如下:

import pandas as pd
from fuzzywuzzy import fuzz

# 构造示例数据
data = {
    "id": [1, 2, 1, 2, 1],
    "name": ["David", "Peter", "David", "Peter", "David"],
    "affiliation": [
        "Department of Biology, State University",
        "Dept. of Chemistry",
        "Biology Department, University of State",
        "Chemistry Dept.",
        "Department for Zoology, 2nd State University"
    ]
}
df = pd.DataFrame(data)

# 自定义分组去重函数
def deduplicate_affiliation(group, threshold=80):
    kept_aff = []
    for aff in group["affiliation"]:
        # 校验当前条目和已保留条目的相似度
        is_duplicate = False
        for exist_aff in kept_aff:
            # token_set_ratio忽略词序、大小写、停用词干扰,适配当前场景
            if fuzz.token_set_ratio(aff, exist_aff) >= threshold:
                is_duplicate = True
                break
        if not is_duplicate:
            kept_aff.append(aff)
    # 返回去重后的分组结果
    return pd.DataFrame({
        "id": group["id"].iloc[0],
        "name": group["name"].iloc[0],
        "affiliation": kept_aff
    })

# 按id+name分组后应用去重逻辑
result = df.groupby(["id", "name"], group_keys=False).apply(deduplicate_affiliation).reset_index(drop=True)
print(result)

输出效果

运行代码后输出结果和预期一致,示例输出:

id   name                                  affiliation
0   1  David      Department of Biology, State University
1   1  David  Department for Zoology, 2nd State University
2   2  Peter                          Dept. of Chemistry

如果需要将重复项替换为公共字符串,可在判定为重复时,对两个字符串分词后去掉of/for等停用词,取共有词拼接为标准值即可。

优化建议

  • 可提前做字符串标准化:把Dept.统一替换为Department,去掉所有of/for等无意义介词,再做相似度计算,准确率会大幅提升
  • 可根据自己的数据场景调整相似度阈值threshold,阈值越高要求匹配度越高,反之越宽松

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:00:00