Python遍历pandas订单成本列计算交易加价总和报错如何解决?
解决方案
原有代码存在两个核心问题:
- 条件分支逻辑顺序错误:
value <=19.99的判断优先级在value >5之前,导致所有大于5且小于20的值都会进入第二个分支,第三个分支永远不会被触发 - 多余的
break语句:会在第一次命中第三个分支时直接终止循环,后续交易数据不会被计算
方案1:循环直接累加总加价额
保留逐笔输出的同时累加总金额:
total_markup = 0 for key, value in df.cost_of_the_order.iteritems(): if value >= 20: markup = value * 0.25 elif value > 5: # 修正条件顺序,大于5小于20的交易走15%加价规则 markup = value * 0.15 else: # 小于等于5的交易不加价 markup = 0 total_markup += markup print(markup) print("总加价额:", total_markup)
方案2:追加为新列后求和(更推荐的pandas向量化写法,计算效率更高)
import numpy as np # 新增markup列存储每笔交易的加价金额 df['markup'] = np.where( df['cost_of_the_order'] >= 20, df['cost_of_the_order'] * 0.25, np.where( df['cost_of_the_order'] > 5, df['cost_of_the_order'] * 0.15, 0 ) ) # 输出逐笔加价金额 print(df['markup']) # 输出总加价额 print("总加价额:", df['markup'].sum())
内容的提问来源于stack exchange,提问作者Anthony P. Trejo
相关产品推荐
相关产品推荐

