Pandas条件筛选计算时DatetimeArray不支持&操作报错如何解决
问题修复方案
原代码错误原因
- 布尔索引写法错误:
DF[DF['PCS']==0]返回的是筛选后的子DataFrame,不是用于逐行判断的布尔序列,位运算符&不能直接作用于两个DataFrame对象,这也是你遇到TypeError的核心原因 - 位运算符
&优先级高于比较运算符,多个条件组合时每个判断条件必须加括号 - 不能用Python原生
if对整列布尔序列做判断,pandas是向量化操作,不需要逐行判断分支 - 原赋值逻辑会覆盖全表
PCS列,不是仅修改符合条件的行
正确实现代码
第一步:预处理BOX列(必做)
样例数据中BOX列有-占位符,需要先转成数值类型避免相乘报错:
import pandas as pd # 将非数值内容转换为空值后填充为0,再转整数,可按需调整填充规则 DF['BOX'] = pd.to_numeric(DF['BOX'], errors='coerce').fillna(0).astype(int)
第二步:条件更新PCS值
用loc定位到符合条件的行,仅修改对应行的PCS值:
# 构造条件掩码,每个条件必须用括号包裹 condition = (DF['PCS'] == 0) & (DF['ITEM DESC'] == 'ITEM XL') # 仅更新符合条件的行 DF.loc[condition, 'PCS'] = DF.loc[condition, 'PCS'] * DF.loc[condition, 'BOX'] * 48
运行后符合条件的ITEM XL行的PCS值会自动计算更新,其余行保持原值不变。
内容的提问来源于stack exchange,提问作者Trunks
相关产品推荐
相关产品推荐

