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

pandas dataframe使用fuzzywuzzy模糊匹配名称仅返回自身问题排查

问题原因
  • 未排除当前行自身的匹配结果:fuzz.partial_ratio计算两个完全相同的字符串时返回值为100,必然高于你设置的50阈值,因此每行自身一定会被纳入结果列表,这是你现在输出仅包含自身名称的核心原因。
  • 原有函数设计存在缺陷:你仅向check_name函数传入了当前行的名称字段,没有传入当前行的索引,无法区分匹配结果中哪些属于当前行自身、哪些属于其他行的匹配结果,无法完成排除逻辑。
修复代码
from fuzzywuzzy import fuzz
import pandas as pd

# 提前提取名称列表和对应索引,避免每次apply重复遍历全表,提升执行效率
all_names = df['Name'].tolist()
all_indexes = df.index.tolist()

def get_similar_names(current_idx, current_name, threshold=50):
    similar_list = []
    for idx, name in enumerate(all_names):
        # 先排除当前行自身,再校验相似度阈值
        if all_indexes[idx] != current_idx and fuzz.partial_ratio(name, current_name) >= threshold:
            similar_list.append(name)
    return similar_list

# apply调用时同时传入行索引(row.name为pandas行对象的内置索引属性)和名称字段
df['Checked'] = df.apply(lambda row: get_similar_names(row.name, row['Name']), axis=1)

运行上述代码即可得到你预期的输出结果。如果你的数据量较大(行数超过1000),可以考虑预计算相似度矩阵进一步优化执行效率,避免O(n²)的重复计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:51:03