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

pandas实现两个DataFrame列模糊匹配 提取对应行风险值

实现Pandas双字段子串匹配打标

问题说明

现有两个Pandas DataFrame对象:

  • df1:存储环境全量漏洞信息,核心字段为title(漏洞标题)、tags(漏洞标签)
  • df2:存储漏洞例外规则,核心字段为title(规则匹配标题子串)、tags(规则匹配标签子串)、Risk(匹配后对应的风险值),与df1存在同名字段

需要实现的匹配逻辑:
逐行校验df1的记录,若某条记录同时满足「title字段包含df2某条规则的title子串」、「tags字段包含同一条df2规则的tags子串」(均为非完全精确的子串匹配),则将对应df2规则的Risk值填入df1新增的risk列;未匹配到任何规则的记录,risk字段填N/A。

示例数据与预期结果

  • df1示例行:
    • title=vulnerability1,tags=prod,dev
    • title=issue2,tags=dev
    • title=issue3,tags=prod, repo
    • title=task4,tags=dev, repo
  • df2示例行:
    • title=vuln,tags=prod,Risk=RIS001
    • title=issue,tags=dev,Risk=RIS002
    • title=note,tags=repo,Risk=RIS003
  • 预期输出:
    • vulnerability1 匹配 RIS001
    • issue2 匹配 RIS002
    • issue3、task4 无匹配,risk字段为N/A

你之前编写的代码存在两个核心问题:一是用isin()做精确值匹配,不符合子串包含的匹配要求;二是没有实现两个字段的联动规则匹配,无法正确关联对应Risk值。

可直接运行的实现代码

例外规则表的数据量通常远小于全量漏洞表,因此遍历规则表做批量匹配的效率更高,代码如下:

import pandas as pd

# 初始化risk列,未匹配记录默认值为N/A
df1['risk'] = 'N/A'

# 遍历每一条例外规则
for _, rule in df2.iterrows():
    # 提取当前规则的匹配条件和对应风险值
    match_title_substr = rule['title']
    match_tag_substr = rule['tags']
    target_risk = rule['Risk']
    
    # 构造匹配掩码:同时满足title、tags包含对应子串的行
    match_condition = (
        df1['title'].str.contains(match_title_substr, na=False)
        & df1['tags'].str.contains(match_tag_substr, na=False)
    )
    
    # 给匹配到的行赋值对应风险值
    df1.loc[match_condition, 'risk'] = target_risk

代码说明

  • 初始化risk列时直接给全表赋值N/A,无需后续单独处理未匹配的行
  • 用Pandas内置的Series.str.contains()实现子串匹配,比手写逐字符循环判断效率高很多,参数na=False用于规避字段为空值时的运行报错
  • 匹配逻辑严格按照需求实现:只有同一条规则的title、tags子串同时被df1记录包含时,才会命中对应Risk值
  • 上述代码跑示例数据的输出完全符合预期:
titletagsrisk
vulnerability1prod,devRIS001
issue2devRIS002
issue3prod, repoN/A
task4dev, repoN/A

可选调整项

  • 如果你的实际字段名存在大小写差异、带空格(比如你之前代码里写的Associated Tags),把代码中对应的字段名替换为实际字段名即可
  • 如果需要做大小写不敏感的子串匹配,可以给str.contains()增加参数case=False
  • 如果存在一条df1记录匹配多条df2规则的场景,代码默认会保留最后遍历到的规则的Risk值,如需调整优先级,可以提前将df2按照规则优先级排序后再遍历

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:27:39