使用Pandas DataFrame时替换多重if判断语句的可行方案咨询
方案1:字典映射+map向量化运算(优先推荐)
针对你这种等值匹配的场景,这是性能最高、代码最简洁的方案,新增条件只需要修改映射字典即可:
# 定义A列取值和对应增量的映射关系 add_map = {1: 100, 2: 200, 3: 300, 5: 400, 9: 500} # 批量映射后统一计算 df['A10'] = df['A'] + df['B'] + df['A'].map(add_map)
方案2:np.select 多条件匹配
适合存在非等值、多列组合等复杂条件的场景,条件和对应取值分开维护,可读性高:
import numpy as np # 按顺序定义匹配条件列表 conditions = [ df['A'] == 1, df['A'] == 2, df['A'] == 3, df['A'] == 5, df['A'] == 9 ] # 与条件顺序一一对应的增量列表 add_vals = [100, 200, 300, 400, 500] # 匹配计算,default参数为未匹配到条件时的默认增量,可按需修改 df['A10'] = df['A'] + df['B'] + np.select(conditions, add_vals, default=0)
方案3:apply + 自定义函数
适合计算逻辑极其复杂,需要嵌套多步判断的场景,仅推荐小数据量下使用:
add_map = {1: 100, 2: 200, 3: 300, 5: 400, 9: 500} def calc_a10(row): # 可在此处添加任意自定义判断逻辑 add_val = add_map.get(row['A'], 0) return row['A'] + row['B'] + add_val df['A10'] = df.apply(calc_a10, axis=1)
选型建议
- 仅需要等值匹配时优先选方案1,运行效率远高于其他方案,维护成本最低
- 存在范围判断、多列组合判断时选方案2
- 逻辑复杂度高、数据量小于10万行时可以选方案3
内容的提问来源于stack exchange,提问作者g123456k
相关产品推荐
相关产品推荐

