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

如何根据多个外部列表向Pandas DataFrame有条件插入标签列值

问题原因
  • 大小写不匹配:你定义的关键词多为小写,但PARTICULARS列内容为大写,直接匹配必然失败
  • 函数逻辑错误:apply是逐行处理,但你的add_label没有获取当前行的PARTICULARS内容,反而判断关键词是否存在于整个列的拆分结果中,完全偏离需求
  • 语法错误:你用了比较运算符==做赋值操作,同时普通列表没有__name__属性,无法直接获取列表名
  • 逻辑遗漏:只传入了fuel相关列表,cc、ref两个规则完全没有用到
正确实现

首先构造标签和关键词的映射字典,统一转小写做模糊匹配,避免大小写问题,实现代码如下:

import pandas as pd
import numpy as np

# 构造标签-关键词映射字典,统一管理匹配规则
label_map = {
    'fuel': ['hpcl', 'bpcl'],
    'cc': ['brn', 'del', 'rq'],
    'ref': ['transfer', 'tx']
}

# 定义逐行匹配函数
def get_label(particulars):
    # 统一转小写,避免大小写适配问题
    p_lower = particulars.lower()
    for label, keywords in label_map.items():
        for kw in keywords:
            if kw in p_lower:
                return label
    # 无匹配返回NaN
    return np.nan

# 应用函数生成Label列
df['Label'] = df['PARTICULARS'].apply(get_label)
运行结果验证

执行后输出和你预期完全一致:

DATEPARTICULARSDRCRLabel
004-03-2017UPI PA100000.0NaN
104-03-2017UPI PA100000.0NaN
204-03-2017POS BPCL COCO PU10000.0fuel
304-03-2017BRN PYMT CARD25360.0cc
404-03-2017UPI PA100500.0NaN
504-03-2017POS BPCL COCO PU10000.0fuel
604-04-2017INB IFT PARTY TRANSFER600000.0ref
优化方案(大数据量推荐)

如果数据量超过10万行,用向量化的str.contains代替apply性能更高:

df['Label'] = np.nan
for label, keywords in label_map.items():
    pattern = '|'.join(keywords)
    mask = df['PARTICULARS'].str.contains(pattern, case=False, na=False)
    df.loc[mask, 'Label'] = label

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:18:02