Pandas链式调用assign新增列报Series真值模糊错误如何解决
错误原因
报错的核心原因是assign方法传入的lambda函数接收的参数是聚合后的完整DataFrame,此时x.Business_segment_item是Series类型,Python原生if条件无法直接对整个Series做布尔判断,因此抛出歧义错误。
你之前使用apply(axis=1)的写法是逐行遍历处理,每次拿到的是单行数据的单个值,因此不会报错,但逐行操作性能较差,也不需要额外创建临时DataFrame。
方法链实现方案
直接使用向量化条件判断即可在方法链中完成需求,不需要拆分流程也不需要创建临时表,性能比逐行apply更高。
方案1:使用numpy.where(写法更直观)
import numpy as np (omc_e.query('GL_account == "740190" and Posting_date > "2021-06-30"') .groupby(['Business_segment_item'], as_index=False) ['Amount_DKK'] .sum() .assign(Depreciation = lambda x: np.where(x.Business_segment_item == "", 0, x.Amount_DKK)) )
方案2:使用Pandas原生where方法(无需额外导入依赖)
(omc_e.query('GL_account == "740190" and Posting_date > "2021-06-30"') .groupby(['Business_segment_item'], as_index=False) ['Amount_DKK'] .sum() .assign(Depreciation = lambda x: x.Amount_DKK.where(x.Business_segment_item != "", 0)) )
内容的提问来源于stack exchange,提问作者Morten_DK
相关产品推荐
相关产品推荐

