如何在Python Pandas中通过循环为DataFrame添加PURCHSE判断列?
在Pandas中基于价格判断新增布尔列的正确实现方式
你的需求其实很常见,但你当前的循环写法有两个问题:一是没有把判断结果对应到DataFrame的每一行,只是在循环里反复给一个变量赋值;二是Pandas本身是为矢量化操作设计的,用循环处理列数据效率很低。下面给你几种更合适的实现方式:
方法一:直接使用矢量化布尔判断(推荐,效率最高)
这是Pandas处理这类问题最简洁高效的方式,直接对整个PRICE列进行条件判断,结果会自动生成一个布尔Series,直接赋值给新列即可:
import pandas as pd # 先构造你的DataFrame df1 = pd.DataFrame({ 'PRODUCT': ['ABC', 'ABB', 'ABE', 'DCB'], 'PRICE': [5000, 2500, 1800, 7200] }) # 新增PURCHASE列 df1['PURCHASE'] = df1['PRICE'] > 3000 print(df1)
运行后就能得到你想要的结果:
PRODUCT PRICE PURCHASE 0 ABC 5000 True 1 ABB 2500 False 2 ABE 1800 False 3 DCB 7200 True
方法二:使用apply方法(适合复杂逻辑)
如果之后你的判断逻辑变得更复杂,可以用apply方法自定义函数:
def decide_purchase(price): return price > 3000 df1['PURCHASE'] = df1['PRICE'].apply(decide_purchase)
这种方式比循环灵活,但效率还是不如矢量化操作,简单逻辑优先用方法一。
方法三:如果一定要用循环(不推荐)
如果你坚持要用循环实现,需要遍历DataFrame的索引,把结果对应到每一行:
# 先初始化新列 df1['PURCHASE'] = False for idx, price in enumerate(df1['PRICE']): if price > 3000: df1.loc[idx, 'PURCHASE'] = True
这种写法能实现需求,但处理大数据量时会很慢,所以不推荐。
最后提醒:你原来的代码里有拼写错误(PURCHESE应该是PURCHASE),记得修正哦~
内容的提问来源于stack exchange,提问作者Taewoo.Lim
相关产品推荐
相关产品推荐

