Pandas中如何通过IF/ELSE逻辑根据列值求和结果新增字符串列
Pandas新增条件判断列实现方案
你的判断逻辑(KIDS、TEENS两列数值之和大于0则标记有子女,否则标记无子女)是完全成立的,但不推荐使用Python原生逐行if循环处理DataFrame,这类场景用pandas/numpy的向量化接口效率更高,代码也更简洁。
推荐实现方式(性能最优)
使用numpy.where做二元条件判断,是这类场景的标准写法,代码如下:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({ 'NAME': ['Steve', 'John', 'Peter', 'Frank', 'Jessica', 'Donny'], 'KIDS': [1, 0, 0, 0, 1, 0], 'TEENS': [0, 1, 2, 0, 0, 0] }) # 新增CHILDREN列 df['CHILDREN'] = np.where(df['KIDS'] + df['TEENS'] > 0, 'YES', 'NO')
numpy.where是底层优化过的向量化运算,逻辑为逐元素匹配判断条件:满足KIDS + TEENS > 0的行返回YES,不满足的返回NO,即使是十万级以上的数据量也能快速跑完。
适配原生if逻辑的写法(小数据量可用)
如果你更习惯写显式if判断的函数逻辑,可以用apply方法逐行传入判断函数,注意这种方式性能弱于上面的向量化实现,仅适合千行以内的小数据集场景:
def check_children(row): if row['KIDS'] + row['TEENS'] > 0: return 'YES' return 'NO' df['CHILDREN'] = df.apply(check_children, axis=1)
避坑提示:不要写原生
for循环遍历DataFrame行索引再逐行赋值,这种写法完全没有利用pandas的底层优化,数据量稍大就会运行极慢。
运行以上任意一段代码,都能得到你期望的输出结果:
NAME KIDS TEENS CHILDREN 0 Steve 1 0 YES 1 John 0 1 YES 2 Peter 0 2 YES 3 Frank 0 0 NO 4 Jessica 1 0 YES 5 Donny 0 0 NO
内容的提问来源于stack exchange,提问作者AntonioGrissini
相关产品推荐
相关产品推荐

