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

在Pandas中根据Col2条件更新Col1值的优化方法咨询

这个问题我之前也碰到过!用map写一堆嵌套判断确实越写越乱,分享几个更简洁易维护的方案,以后加新规则直接改配置就行~

方案1:字典维护规则 + apply(最易扩展)

这个方法把匹配关键词和对应乘数单独存在字典里,实现逻辑和规则配置完全分离,新增条件只需要往字典里加键值对就行,不用改核心处理逻辑:

import pandas as pd

# 你的示例DataFrame
df = pd.DataFrame({
    'Col1': [10, 32, 26],
    'Col2': ['mango_orange', 'apple_Banana', 'Onion']
})

# 定义规则字典:关键词 -> 对应乘数(统一转小写匹配,避免大小写问题)
match_rules = {
    'mango': 2,
    'apple': 3,
    'onion': 4
}

def get_updated_value(row):
    col2_lower = row['Col2'].lower()
    # 遍历规则找到匹配的关键词
    for keyword, multiplier in match_rules.items():
        if keyword in col2_lower:
            return row['Col1'] * multiplier
    return row['Col1']  # 无匹配时返回原数值

df['col1_updated'] = df.apply(get_updated_value, axis=1)

比如以后要加'grape':5的规则,直接往match_rules里加一行就行,非常清爽。

方案2:numpy.select(适合明确互斥条件场景)

如果你的匹配条件是互斥的(一个Col2不会同时包含多个关键词),用numpy.select是更高效的向量化方案,性能比apply好很多:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Col1': [10, 32, 26],
    'Col2': ['mango_orange', 'apple_Banana', 'Onion']
})

# 定义条件列表和对应的乘数列表
conditions = [
    df['Col2'].str.contains('mango', case=False),
    df['Col2'].str.contains('apple', case=False),
    df['Col2'].str.contains('onion', case=False)
]
multipliers = [2, 3, 4]

# 匹配条件并计算结果,无匹配时返回原Col1值
df['col1_updated'] = np.select(conditions, df['Col1'] * multipliers, default=df['Col1'])
方案3:向量化条件赋值(性能最优)

如果追求极致性能,直接用str.contains配合loc条件赋值,完全是pandas的向量化操作,没有循环,大数据量下速度最快:

import pandas as pd

df = pd.DataFrame({
    'Col1': [10, 32, 26],
    'Col2': ['mango_orange', 'apple_Banana', 'Onion']
})

# 初始化更新列为原Col1值
df['col1_updated'] = df['Col1']

# 逐个匹配赋值,新增规则就加一行
df.loc[df['Col2'].str.contains('mango', case=False), 'col1_updated'] *= 2
df.loc[df['Col2'].str.contains('apple', case=False), 'col1_updated'] *= 3
df.loc[df['Col2'].str.contains('onion', case=False), 'col1_updated'] *= 4

方案选择建议

  • 规则频繁变动、需要灵活扩展 → 选方案1
  • 条件明确互斥、追求性能 → 选方案2或3
  • 处理超大数据集 → 优先方案3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:27:35