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

如何用fuzzy_pandas实现DataFrame精确匹配后剩余行的Levenshtein模糊匹配并返回全列

解决方案

问题分析

你遇到的核心问题是fpd.fuzzy_merge使用Levenshtein方法时仅返回匹配列,这是因为keep="match"参数会限制输出仅保留匹配相关列;另外,需要先筛选出未被精确匹配的剩余行再执行模糊匹配,避免重复处理已匹配数据。

步骤1:筛选未精确匹配的行

先通过左连接标记匹配状态,提取未匹配的行:

import pandas as pd
import fuzzy_pandas as fpd

# 示例数据初始化(实际场景替换为文件读取逻辑)
sample_df = pd.DataFrame({
    "Raw desc": ["CAULIFLOWER TRI COLOR 6 CT SAL", "!SYRUP BLACKBERRY 2LB", "PUREE BRKFST SAUSAGE LINK 24CT"],
    "Clean desc": ["cauliflower tri color sal", "syrup blackberry", "puree brkfst sausage link"],
    "Brand": ["SYSCO", "TYSON", "TYSON"]
})

master_df = pd.DataFrame({
    "Master raw desc": ["SYRUP & BLACKBERRY 50Z", "VEGETABLES MXD 6-10 GCHC", "3 LB PAPER FOOD BOAT 500/CS"],
    "Master clean desc": ["syrup blackberry", "vegetables mxd gchc", "paper food boat"],
    "SKU": ["2356123", "4412620", "4551210"]
})

# 执行原精确匹配逻辑
results1 = fpd.fuzzy_merge(
    sample_df, master_df, left_on="Clean desc", right_on="Master clean desc"
)

# 左连接标记匹配状态,筛选未匹配行
full_join = sample_df.merge(
    master_df,
    left_on="Clean desc",
    right_on="Master clean desc",
    how="left",
    indicator=True
)
unmatched_df = full_join[full_join["_merge"] == "left_only"].drop(columns=["_merge", "Master raw desc", "Master clean desc", "SKU"])

步骤2:对未匹配行执行模糊匹配(保留所有列)

修改keep参数为"all",确保返回两个DataFrame的所有列:

# 执行Levenshtein模糊匹配,保留全量列
fuzzy_results = fpd.fuzzy_merge(
    unmatched_df,
    master_df,
    left_on="Clean desc",
    right_on="Master clean desc",
    method="levenshtein",
    threshold=0.85,
    join="left-outer",
    keep="all"  # 关键参数:保留左右表所有字段
)

步骤3:合并最终结果

将精确匹配和模糊匹配的结果合并:

final_results = pd.concat([results1, fuzzy_results], ignore_index=True)
print(final_results)

关键说明

  • keep="all":该参数控制输出列范围,设为"all"会保留左右DataFrame的所有字段,而非仅匹配列;
  • 先筛选未匹配行:避免对已精确匹配的数据重复执行模糊匹配,提升效率并防止结果冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:20:35