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

如何简化重复的Pandas批量赋值代码?硬编码是否最优?

优化重复Pandas赋值代码的方案

你的逐个loc赋值写法确实冗余,维护成本高,硬编码不是最优选择。下面提供几种更简洁、易维护的实现方式:

方案1:正则匹配+字典映射

先定义关键词与产品名称的映射字典,再通过正则匹配提取对应关键词,最后映射为目标产品值。这种方法性能较好,适合大数据集:

import pandas as pd

# 定义关键词到产品的映射字典
product_map = {
    'Bathroom': 'Bathroom',
    'Roof': 'Roofing',
    'Siding': 'Siding',
    'Window': 'Window',
    'Water Treatment': 'Water Treatment',
    'Water Heater': 'Water Heater',
    'Pump': 'Pump',
    'Granulator': 'Granulator',
    'Plumbing': 'Plumbing',
    'Door': 'Door'
}

# 按关键词长度倒序构建正则模式,避免短关键词优先匹配(比如防止"Water"提前匹配,覆盖"Water Treatment")
pattern = '|'.join(sorted(product_map.keys(), key=lambda x: len(x), reverse=True))

# 提取匹配的关键词并映射为产品名称
df['Product'] = df['Campaign'].str.extract(f'({pattern})', expand=False).map(product_map)

方案2:使用np.select批量处理条件

将所有匹配条件和对应结果整理为列表,通过np.select一次性完成赋值,逻辑清晰直观:

import pandas as pd
import numpy as np

product_map = {
    'Bathroom': 'Bathroom',
    'Roof': 'Roofing',
    'Siding': 'Siding',
    'Window': 'Window',
    'Water Treatment': 'Water Treatment',
    'Water Heater': 'Water Heater',
    'Pump': 'Pump',
    'Granulator': 'Granulator',
    'Plumbing': 'Plumbing',
    'Door': 'Door'
}

# 生成条件列表和对应结果列表
conditions = [df['Campaign'].str.contains(key) for key in product_map.keys()]
choices = list(product_map.values())

# 批量赋值,无匹配项设为NaN
df['Product'] = np.select(conditions, choices, default=np.nan)

方案3:apply逐行匹配(适合小数据集)

如果数据集不大,也可以用apply遍历每行,找到第一个匹配的关键词并返回对应产品:

import pandas as pd
import numpy as np

product_map = {
    'Bathroom': 'Bathroom',
    'Roof': 'Roofing',
    'Siding': 'Siding',
    'Window': 'Window',
    'Water Treatment': 'Water Treatment',
    'Water Heater': 'Water Heater',
    'Pump': 'Pump',
    'Granulator': 'Granulator',
    'Plumbing': 'Plumbing',
    'Door': 'Door'
}

def get_product(campaign):
    for key, value in product_map.items():
        if key in campaign:
            return value
    return np.nan

df['Product'] = df['Campaign'].apply(get_product)

总结

硬编码逐个赋值的方式存在代码冗余、维护成本高的问题,新增或修改关键词时需要重复修改代码。上述方案中:

  • 正则映射和np.select性能更优,适合处理大规模数据;
  • apply逻辑更直观,适合小数据集或需要复杂匹配逻辑的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:51:20