pandas DataFrame调用apply结合if else条件判断不生效问题咨询
问题解答
原代码错误原因
- 核心逻辑错位:
apply调用自定义函数时,传入的row仅为sum_result_xxx列的单值,无法关联到当前行对应的frame值。且函数内部嵌套的for i in range(0,len(dd))循环会在首次迭代(i=0)时就触发判断返回,所有行的差值计算都误用了第0行的frame值,和当前行完全不匹配,自然无法触发正确的条件判断。 - 设计冗余易出错:将函数定义嵌套在
z的循环中,容易引发变量作用域类的隐性问题,且apply逐行调用的执行效率远低于pandas原生向量化操作。 - 变量名混用:示例输入中定义的DataFrame名为
df,后续赋值操作却写为dd,若实际代码存在变量名混用的问题,也会直接导致逻辑错误。
调整后代码说明
你更新后的向量化掩码写法符合pandas最佳实践,可正常得到预期结果:
- 通过布尔掩码直接批量筛选不同
sum_result取值的行,避免逐行遍历,执行效率远高于apply写法 - 提前计算
sum_result=2对应的首尾frame值,直接对整个frame列做批量差值计算,逻辑清晰无错位问题 - 移除了冗余的嵌套循环和函数定义,可维护性更强
运行该代码即可得到你预期的输出:sum_result_ICV对应的结果列中,frame 1-3、8-10返回NG-ICV,11-14返回ReviewNG-ICV,完全匹配你的业务逻辑要求。
内容的提问来源于stack exchange,提问作者TeoK
相关产品推荐
相关产品推荐

