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

Python实现类似Excel VLOOKUP的部分字符串匹配合并DataFrame

公司名部分匹配合并解决方案

报错原因

  1. 第一种方案报错TypeError: string indices must be integers的核心问题是:for i in marketing_df默认遍历的是DataFrame的列名(字符串类型),用字符串作为对象取i['CompanyMKTG']不符合语法要求。同时Python没有issubstring方法,子串判断需要用a in b的写法。
  2. 第二种方案报错IndexError: single positional indexer is out-of-bounds的原因是:部分销售侧公司名在营销数据集里没有匹配项,loc筛选后得到空序列,调用.iloc[0]时索引越界。

可行实现方案

方案1:双向子串匹配(直接满足部分匹配要求)

思路是遍历营销数据的每一个公司名,判断是否和销售侧任意公司名存在「A包含B或B包含A」的子串关系,匹配成功就保留,否则过滤。

# 提取销售侧清洗后的唯一公司名列表
sales_comp_list = sales_df['CompanySales'].unique().tolist()

# 定义匹配函数,返回匹配到的销售侧公司名,无匹配返回None
def match_company(mktg_comp):
    for sales_comp in sales_comp_list:
        # 双向子串判断,满足任意一种就算匹配成功
        if sales_comp in mktg_comp or mktg_comp in sales_comp:
            return sales_comp
    return None

# 给营销数据集添加匹配结果字段
marketing_df['MatchedSalesCompany'] = marketing_df['CompanyMKTG'].apply(match_company)

# 过滤出匹配成功的行,就是你需要的结果
result_df = marketing_df[marketing_df['MatchedSalesCompany'].notna()].copy()

# 导出结果
result_df.to_csv('matched_marketing_contacts.csv', index=False)

方案2:模糊相似度匹配(兼容拼写、特殊字符差异)

如果存在拼写差异(比如重音符号、单引号差异),可以用模糊相似度匹配,阈值可根据业务需求调整:

# 先安装依赖:pip install fuzzywuzzy python-Levenshtein
from fuzzywuzzy import fuzz

sales_comp_list = sales_df['CompanySales'].unique().tolist()

def fuzzy_match(mktg_comp, threshold=80):
    for sales_comp in sales_comp_list:
        if fuzz.ratio(mktg_comp, sales_comp) >= threshold:
            return sales_comp
    return None

marketing_df['MatchedSalesCompany'] = marketing_df['CompanyMKTG'].apply(fuzzy_match)
result_df = marketing_df[marketing_df['MatchedSalesCompany'].notna()].copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:27:02