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

Python如何匹配列内文本模式并在新增列映射对应数值

实现方案

你用字典存储匹配规则的思路完全可行,下面提供两种常用场景的实现方式:


方案1:Pandas实现(推荐处理结构化表格数据)

适合中大型数据集,处理效率高,代码简洁:

  1. 先补全你的匹配规则字典
match_map = {
    'see-dd': 14,
    'sal-led': 8,
    'dis-dd': 5
}
  1. 完整处理代码
import pandas as pd

# 读取数据集,此处用你提供的样例直接构造,实际可以换成pd.read_csv/读取excel的逻辑
df = pd.DataFrame({
    'id': ['see-dd-23aaaa33_00', 'see-dd-aaaaa_o00', 'sal-led-sss_0', 'sal-led-sss.AA', 'dis-dd-red_0'],
    'status': ['y','y','y','n','n']
})

# 初始化pw列,默认值可根据需求调整为0/其他默认值
df['pw'] = pd.NA

# 遍历匹配规则赋值
for keyword, pw_val in match_map.items():
    df.loc[df['id'].str.contains(keyword, na=False), 'pw'] = pw_val

# 可选:和示例输出一致,清理id列的后缀(下划线、点之后的内容)
df['id'] = df['id'].str.split(r'[._]').str[0]

# 输出结果即可
print(df)

方案2:纯Python实现(无第三方依赖)

适合小数据集,不需要安装额外库:

# 原始数据示例
raw_data = [
    ['see-dd-23aaaa33_00', 'y'],
    ['see-dd-aaaaa_o00', 'y'],
    ['sal-led-sss_0', 'y'],
    ['sal-led-sss.AA', 'n'],
    ['dis-dd-red_0', 'n']
]
match_map = {'see-dd':14, 'sal-led':8, 'dis-dd':5}

result = []
for id_val, status in raw_data:
    # 匹配pw值
    pw = None
    for kw, val in match_map.items():
        if kw in id_val:
            pw = val
            break
    # 清理id后缀
    clean_id = id_val.split('.')[0].split('_')[0]
    result.append([clean_id, status, pw])

# 打印结果
for row in result:
    print(row)

注意事项

  • 如果存在单个id同时匹配多个关键词的情况,调整匹配字典的顺序即可,排在前面的规则会优先生效
  • 如果id存在大小写不一致的情况,Pandas实现可以在str.contains中加case=False参数,纯Python实现可以把id和关键词都转成小写再判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:39:03