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

如何用Python为DataFrame按规则优先级新增分类列

原代码问题说明

原实现存在4处核心错误,导致无法得到预期结果:

  • 正则语法错误:[First]|[Last]属于正则字符集写法,仅会匹配F/i/r/s/t/L/a等单个字符,无法识别完整的[First]/[Last]占位符,方括号作为正则元字符需要转义
  • 遍历逻辑错误:for i in df是遍历DataFrame的列名,并非逐行读取文本内容,直接将整列Series传入re.search会触发类型报错
  • 规则覆盖不全:仅写了Save关键词匹配,缺失百分比、现金返还的Offer规则,完全未实现Gratitude、Curiosity、Generic三类判断,且Offer标签错写为Savings
  • 列名不匹配:读取文件时定义的列名是Line/Type,和后续调用的columnA字段不对应
正确实现代码

严格按照规则优先级实现,使用pandas的apply方法逐行匹配,避免手动循环append的低效问题:

import pandas as pd
import re

# 读取CSV文件,若你的文件无表头可自行调整header/names参数
df = pd.read_csv('2021 Lines Types.csv')

def get_category(content):
    content = str(content)
    # 最高优先级:匹配个性化占位符
    if re.search(r'\[First\]|\[Last\]', content):
        return "Personalized"
    # 次优先级:匹配优惠类(Save关键词/百分比折扣/现金返还,忽略大小写)
    elif re.search(r'save|saves|\d+%|\$\d[,\d]*.*back', content, flags=re.IGNORECASE):
        return "Offer"
    # 第三优先级:匹配感谢类内容
    elif re.search(r'thank\s*you', content, flags=re.IGNORECASE):
        return "Gratitude"
    # 第四优先级:匹配疑问类内容(带问号的问句)
    elif re.search(r'\?', content):
        return "Curiosity"
    # 无匹配规则归为通用类
    else:
        return "Generic"

# 生成Column B列
df['Column B'] = df['Column A'].apply(get_category)

# 打印验证结果,需要保存文件可取消下一行注释
print(df)
# df.to_csv('classified_result.csv', index=False)
运行结果验证

执行代码后输出的分类结果和预期完全一致:

Column AColumn B
Hi [First]!Personalized
Thank You!Gratitude
What Car?Curiosity
Are you [First] [Last]?Personalized
Did you know?Curiosity
Save 25% [First]!Personalized
Get $2,000 Back!Offer
Embrace the road aheadGeneric
Everyone saves 30%!Offer

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:03:31