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

如何在Pandas中根据ID是否在指定列表生成新列LT?

高效实现LT列的创建(替代iterrows循环)

嘿,我来帮你搞定这个数据处理需求!用iterrows逐行循环确实不是最优做法——Pandas提供了更简洁、性能更好的向量式操作来完成这个逻辑,完全不用逐行遍历。

先明确你的需求:

  • 现有DataFrame org,包含ID列
  • 列表ltlist = [1,2,3,4,5]
  • 新建LT列:若ID值在ltlist中,则取对应ID值;否则赋值为0

方法一:用numpy.where(最直观的向量式操作)

一行代码就能搞定,逻辑清晰又高效:

import pandas as pd
import numpy as np

# 初始化你的数据
org = pd.DataFrame({'ID': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]})
ltlist = [1, 2, 3, 4, 5]

# 创建LT列
org['LT'] = np.where(org['ID'].isin(ltlist), org['ID'], 0)

解释:

  • org['ID'].isin(ltlist)会生成一个布尔序列,标记每个ID是否在目标列表中
  • np.where()根据这个布尔序列选择取值:满足条件时取ID值,不满足时取0

方法二:Pandas条件赋值(分步操作,逻辑更直白)

如果你更喜欢分步拆解操作,也可以这样写:

# 先把LT列初始化为ID的值
org['LT'] = org['ID']
# 把不在ltlist中的ID对应的LT值设为0
org.loc[~org['ID'].isin(ltlist), 'LT'] = 0

解释:

  • ~符号用来对布尔序列取反,~org['ID'].isin(ltlist)就是“ID不在ltlist中”的条件
  • loc用来精准定位满足条件的行,直接修改LT列的对应值

为什么不推荐用iterrows?

iterrows是逐行遍历DataFrame,当数据量较大时,这种方法的性能会差得离谱——向量式操作是Pandas的核心优势,它在底层用C语言实现计算,速度比逐行循环快几个数量级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:52