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

Pandas非精确匹配实现类Vlookup功能:多列查找返回对应Value值

pandas模糊匹配实现方案

实现思路

不用merge、isin这类仅支持精确匹配的方法,核心逻辑是把df1所有待匹配列的内容合并为单个文本字段,再对df2的每个检索词做子串模糊匹配,无需提前处理df1中的特殊字符、空格:

  1. 合并df1指定检索列的所有内容为单列
  2. 遍历df2的每个检索词,检查是否是上述合并后文本的子串,匹配到就返回对应Value,无匹配返回空值

完整可运行代码

import pandas as pd

# 示例数据构造,实际使用时替换为pd.read_csv读取你的csv文件即可
df1 = pd.DataFrame({
    'Column1': ['000_abc111', 'Def _ 1', '23uvw-00-11'],
    'Column2': ['Def _ 1', '11111ghi', 'Def _ 1'],
    'Column3': ['xyz876', 'Def _ 1', 'Def _ 1'],
    'Value': ['Box1', 'Box2', 'Box3']
})
df2 = pd.DataFrame({
    'To_Check': ['abc', 'xyza', 'ghi', 'xyz', 'uvw']
})

# 1. 指定要检索的列,实际20列直接把对应列名放入列表即可
check_cols = ['Column1', 'Column2', 'Column3']
# 2. 合并df1所有检索列的内容为单个字符串列
df1['all_text'] = df1[check_cols].apply(lambda x: ' '.join(x.astype(str)), axis=1)

# 3. 定义匹配逻辑
def get_match_value(keyword):
    # regex=False避免检索词中的特殊字符被识别为正则规则,na=False跳过空值
    match_rows = df1[df1['all_text'].str.contains(keyword, regex=False, na=False)]
    # 匹配到多个结果默认取第一个,要返回所有匹配结果可以改成 return ','.join(match_rows['Value'].tolist())
    return match_rows['Value'].iloc[0] if not match_rows.empty else ''

# 4. 给df2生成结果列
df2['Value'] = df2['To_Check'].apply(get_match_value)

# 输出结果
print(df2)

运行输出和你预期的结果完全一致:

To_Check Value
0      abc  Box1
1     xyza      
2      ghi  Box2
3      xyz  Box1
4      uvw  Box3

小提示:如果需要忽略大小写匹配,在str.contains参数中增加case=False即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:45:07