You need to enable JavaScript to run this app. 如何使用Pandas替代for循环优化df['Состояние']字段的关键词分类
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas替代for循环优化df['Состояние']字段的关键词分类

Pandas 分类标注向量化优化方案

原代码存在笔误:第二个循环中使用的list_exp未定义,应为list_dem。

优化思路
  • 摒弃逐行列表推导、逐关键词遍历的Python层循环,改用Pandas内置向量化字符串匹配(底层为C实现,大数据量下性能提升显著)
  • 用正则或规则批量匹配同组关键词,无需对每个关键词单独循环
  • 通过np.select按原逻辑的优先级完成条件赋值,保证规则一致性
优化后代码
import re
import numpy as np

conditions = ['a', 'b']
list_rep = ['a1', 'a2']
list_dem = ['b1', 'b2']

# 提前将目标序列转为小写字符串,统一匹配规则
s = df['Состояние'].astype(str).str.lower()

# 拼接匹配正则,对关键词做转义避免特殊字符匹配异常
rep_pattern = '|'.join(re.escape(kw) for kw in list_rep)
dem_pattern = '|'.join(re.escape(kw) for kw in list_dem)

# 按原逻辑优先级定义匹配条件
conds = [
    s.str.contains(rep_pattern),  # 优先级1:匹配任意rep关键词 → 标注a
    s.str.contains(dem_pattern),  # 优先级2:匹配任意dem关键词 → 标注b
    s.str.contains(conditions[0]),  # 优先级3:字符串包含字符a → 标注a
    s.str.contains(conditions[1])   # 优先级4:字符串包含字符b → 标注b
]

# 对应条件的赋值结果
choices = [
    conditions[0],
    conditions[1],
    conditions[0],
    conditions[1]
]

# 未命中所有条件的统一默认置为'-'
df['Состояние'] = np.select(conds, choices, default='-')
逻辑对齐说明
  • 匹配优先级完全和原循环逻辑一致,后匹配的规则不会覆盖前面已经命中的结果
  • 仅需2次全量字符串匹配就完成所有关键词的批量判断,无需对每个关键词单独遍历行
  • 若确认关键词不存在正则特殊字符,可省略re.escape步骤简化代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 15:54:05