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

Pandas如何使用.isin替代if分支中多个or条件实现赋值

Pandas多条件判断优化写法

你原来的逐行apply+多or连接的写法不仅冗余,数据量大时执行效率也很低,直接用Series.isin()搭配向量化赋值就能简化逻辑,同时性能提升非常明显。

最优实现代码

把所有需要匹配的Office值统一放到列表中维护,后续新增/删除匹配项只需要修改列表即可,不需要改动判断逻辑:

import numpy as np

# 待匹配的地区列表
match_regions = ['USA', 'UK', 'Aus', 'Can']
# 向量化判断赋值,无需逐行遍历
office_data['Area'] = np.where(office_data['Office'].isin(match_regions), 1, 2)

逻辑说明

  • office_data['Office'].isin(match_regions)会返回长度和原数据一致的布尔序列:Office字段在目标列表内的行返回True,否则返回False
  • np.where按布尔结果批量赋值:匹配到的行赋值为1,未匹配的行赋值为2,全程为C层面的向量化运算,比apply(axis=1)的逐行Python循环效率高1~2个数量级,数据量越大优势越明显。

无额外依赖写法

如果不想导入numpy,也可以直接利用布尔值转整数的规则(True对应整数1,False对应整数0)直接运算:

match_regions = ['USA', 'UK', 'Aus', 'Can']
office_data['Area'] = 2 - office_data['Office'].isin(match_regions).astype(int)

这个写法执行效率和numpy方案接近,只是可读性稍差,适合二值判断的简单场景。

如果后续判断分支增多(比如超过2个返回值),可以替换为pandas.cut或者Series.map搭配字典映射的方式实现,同样不需要写逐行判断的apply函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:27:13