pandas中替代if-else实现条件赋值的更简洁惯用方案
基于条件批量替换DataFrame值的pandas原生实现
你可以直接利用pandas的逐元素比较特性,一行代码实现需求,完全不需要依赖numpy:
import pandas as pd df = pd.DataFrame({'a': [1,2,3], 'b': [-5, 0, 10]}) df_fin = (df < 2).astype(int)
实现原理
df < 2会对DataFrame内每一个元素执行条件判断,返回布尔类型的DataFrame,满足小于2的位置为True,不满足的为False- 调用
.astype(int)会自动将布尔值转换为对应整数:True转1,False转0,正好匹配你需要的替换规则 - 该方法属于矢量化运算,效率远高于逐元素遍历的写法,是pandas处理批量条件转换的惯用写法
灵活扩展方案
如果后续有更复杂的多分支判断逻辑,可以用元素级applymap实现,写法更灵活:
df_fin = df.applymap(lambda x: 1 if x < 2 else 0)
该方案适合替换规则更复杂的场景,但数据量较大时性能会弱于上述矢量化写法。
内容的提问来源于stack exchange,提问作者Quant Christo
相关产品推荐
相关产品推荐

