Pandas DataFrame多列差值判断按条件填充列实现方法
原代码缺陷说明
- 仅计算了宽度维度的差值,遗漏高度、深度两组维度的差值计算逻辑
- 区间判断逻辑错误:
range(0,1)仅生成整数序列[0],无法识别开区间(0,1)内的浮点数值,完全匹配不到符合要求的差值 - 赋值逻辑错误:循环内直接对整列赋值,会导致所有行被统一填充'Yes',无法实现按行匹配条件、定向填充的效果
- 遗漏核心判断规则:未校验「三个差值任意一个落在目标区间」的规则,也未校验
inf列取值为'T'的前置条件,且赋值列名和需求指定的val列不匹配
正确实现代码
Pandas优先使用向量化运算实现逐行判断,比显式for循环效率更高、逻辑更清晰,可直接复现以下代码:
import pandas as pd # 计算三组维度差值,判断是否存在任意差值落在开区间(0,1) cond_dim = ( (df["new_width"] - df["audited_Width"]).between(0, 1, inclusive="neither") | (df["new_height"] - df["audited_Height"]).between(0, 1, inclusive="neither") | (df["new_depth"] - df["audited_Depth"]).between(0, 1, inclusive="neither") ) # 判断inf列是否为'T' cond_inf = df["inf"] == "T" # 初始化val列为空,两个条件同时满足时填充'YES' df["val"] = "" df.loc[cond_dim & cond_inf, "val"] = "YES" # 打印val列校验结果 print(df["val"])
代码说明
between(0, 1, inclusive="neither")是Pandas内置的开区间判断方法,等价于x>0 & x<1,写法更简洁不易出错- 位运算符
|表示“或”逻辑,即三个差值只要有一个符合区间要求就满足维度条件 df.loc[行筛选条件, 列名]可以精准定位符合条件的行,仅对目标位置赋值,不会出现整列被覆盖的问题
内容的提问来源于stack exchange,提问作者Surya_Jas
相关产品推荐
相关产品推荐

