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

pandas基于多列指定关键词匹配结果填充新列及冲突处理方案

原代码问题分析
  • 循环逻辑错误:第一个关键词Deck匹配失败后直接触发else返回unset,根本没有执行后续关键词的匹配逻辑
  • 列检查顺序错误:需求要求优先检查ColC→ColB→ColA,原函数是ColA→ColB→ColC,顺序完全相反
  • 未处理冲突场景:没有校验同一行是否匹配到多个不同关键词
  • 关键词顺序错误:需求要求关键词优先级是['Deck', 'Beam', 'Wall', 'Grating'],原函数列表顺序不符合要求
  • 空值兼容问题:如果单元格是空值直接调用.lower()会触发报错
正确实现方案
def calc_ColD(row, keywords: list):
    matched = set()
    # 按优先级遍历所有关键词
    for kw in keywords:
        kw_lower = kw.lower()
        # 单关键词检查顺序:ColC → ColB → ColA
        for col in ['ColC', 'ColB', 'ColA']:
            cell_val = str(row[col]).strip().lower()
            if kw_lower in cell_val:
                matched.add(kw)
                break # 匹配到后跳过当前关键词剩余列的检查
    # 按规则返回结果
    if len(matched) > 1:
        return 'Conflict'
    elif len(matched) == 1:
        return next(iter(matched))
    else:
        return '' # 无匹配返回空值

# 自定义关键词列表,后续新增关键词直接修改该列表即可
KEYWORDS = ['Deck', 'Beam', 'Wall', 'Grating']
df['ColD'] = df.apply(calc_ColD, axis=1, keywords=KEYWORDS)
方案说明
  • 扩展性强:关键词通过入参传入,后续新增匹配规则不用修改函数逻辑,直接调整KEYWORDS列表即可
  • 优先级完全符合要求:先按关键词顺序校验,每个关键词严格按照ColC→ColB→ColA的顺序检查
  • 兼容异常场景:空单元格会先转字符串处理,不会触发方法调用报错
  • 冲突校验准确:用集合存储匹配到的关键词,自动去重,只要匹配到多个不同关键词就返回Conflict
  • 输出完全符合需求:无匹配返回空字符串,和预期输出规则一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:24:05