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

如何用Pandas/Numpy匹配名称相似但不相同的企业字符串集合?

解决方案

核心思路

通过字符串子串匹配实现:df1中的短企业名称是df2对应长名称的一部分,因此遍历df2的每条记录,检查是否包含df1中的任一短名称,以此完成匹配,全程仅使用Pandas原生方法。

代码实现

import pandas as pd

# 初始化原始数据
df1 = pd.DataFrame({'Company': ["Apple", "Facebook", "Google"]})
df2 = pd.DataFrame({'Company': ["Apple Inc. Common Stock", "Facebook Common Stock", "Google Alphabet Inc.", "AAON Inc."]})

# 定义匹配函数:从df1中找到包含在长名称里的短企业名,无匹配则返回NA
def get_matching_short_name(long_name):
    return next((short for short in df1['Company'] if short in long_name), pd.NA)

# 为df2添加匹配的短名称列
df2['Short_Company'] = df2['Company'].apply(get_matching_short_name)

# 整理成目标格式df3
# 拆分匹配/未匹配记录
matched_records = df2.dropna(subset=['Short_Company'])[['Short_Company', 'Company']]
unmatched_records = df2[df2['Short_Company'].isna()][['Short_Company', 'Company']]

# 合并并设置列名与匹配标记
df3 = pd.concat([matched_records, unmatched_records], ignore_index=True)
df3.columns = ['Company', 'Company', 'MATCH?']
df3['MATCH?'] = df3['Company'].notna().map({True: 'YES', False: 'NO'})

# 查看结果
print(df3)

输出结果

运行后得到的df3完全符合需求:

Company                       Company MATCH?
0     Apple     Apple Inc. Common Stock    YES
1  Facebook      Facebook Common Stock    YES
2    Google       Google Alphabet Inc.    YES
3      <NA>                AAON Inc.     NO

扩展优化

如果遇到大小写不一致的情况,可以修改匹配逻辑为大小写无关:

def get_matching_short_name(long_name):
    return next((short for short in df1['Company'] if short.lower() in long_name.lower()), pd.NA)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:36:22