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

如何在pandas中使用isin()生成计算列 替代低效for循环

Pandas计算列高效实现方案

你当前使用的逐行for循环属于Python层面的迭代操作,在数据量较大时运行效率极低,替换为Pandas内置的矢量化操作即可大幅提升运行速度,性能可提升数十到上千倍。

推荐实现方式(一行完成逻辑)

使用np.where结合isin的矢量化判断方案,简洁高效:

import numpy as np
# 注意调整列名:你需求中指定的ID列是PRODUCT_ID,原有循环中写的是PRODUCT_CODE,按实际表结构修改即可
portfoy['PRODUCT_TYPE'] = np.where(portfoy['PRODUCT_ID'].isin([3, 5, 8]), 'old', 'new')

逻辑说明

  • Series.isin([3,5,8])会批量判断每一行的PRODUCT_ID是否在目标列表中,返回布尔类型的数组
  • np.where(判断条件, 满足条件返回值, 不满足条件返回值)会批量给新列赋值,全程为底层C实现,无Python层面的循环

替代实现方案(适合规则更复杂的场景)

如果后续映射规则有扩展调整,也可以用字典映射的方式实现:

# 定义ID到类型的映射规则
id_map = {3: 'old', 5: 'old', 8: 'old'}
portfoy['PRODUCT_TYPE'] = portfoy['PRODUCT_ID'].map(id_map).fillna('new')

注意事项

  • 不需要提前初始化PRODUCT_TYPE列为空值,以上两种方案都会直接生成完整的新列
  • 请确认你表中的实际列名,如果ID列名是PRODUCT_CODE就把代码里的PRODUCT_ID替换掉即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:04