DataFrame中如何不使用for循环根据其他列值修改指定列取值
无循环实现条件替换的两种高效方案
- 方案1:pandas
.loc条件赋值(无需额外依赖)
直接通过布尔索引筛选符合条件的行批量赋值,全程为pandas向量化操作,无Python层循环开销:
适用场景:仅需要修改符合条件的行,其余行原值保留。# 筛选type为Option的行,将对应行PRICE列赋值为同行STRIKE的值 df.loc[df['type'] == 'Option', 'PRICE'] = df.loc[df['type'] == 'Option', 'STRIKE'] - 方案2:
numpy.where批量赋值(代码更简洁)
借助numpy的向量化条件判断函数实现,扩展性更强,适合多条件替换场景:import numpy as np # 判断逻辑:满足type==Option时取STRIKE值,否则保留原PRICE值 df['PRICE'] = np.where(df['type'] == 'Option', df['STRIKE'], df['PRICE'])
注意事项
你原代码存在语法错误:if df.loc[i,'type'] == 'Option: 中的字符串'Option缺少右侧闭合单引号,运行会触发语法报错。
以上两种方案均为底层C实现的向量化运算,相比Python原生for循环,数据量越大性能提升越明显,普遍可达百倍到千倍级的效率提升。
内容的提问来源于stack exchange,提问作者Time_Series_FTW
相关产品推荐
相关产品推荐

