基于最新非零周数据计算产品单位成本的Pandas需求
解决方案:按最新有效周数据计算产品单位成本
嘿,我来帮你搞定这个按最新有效周数据计算单位成本的需求。咱们先明确核心要求:每个产品的单位成本要优先用最新一周的非零销量和成本数据(公式为 wkX_cost / wkX_qty),如果最新周的销量是0,就依次往前找第一个有非零数据的周来计算。
输入数据集
首先看一下我们的输入DataFrame:
import pandas as pd df2 = pd.DataFrame([ {'product':'iphone11', 'wk1_qty':2, 'wk1_amount':100, 'wk1_cost':60, 'wk2_qty':3, 'wk2_amount':150, 'wk2_cost':90, 'wk3_qty':0, 'wk3_amount':0, 'wk3_cost':0, 'wk4_qty':5, 'wk4_amount':300, 'wk4_cost':160, 'wk5_qty':0, 'wk5_amount':0, 'wk5_cost':0}, {'product':'acer laptop', 'wk1_qty':3, 'wk1_amount':300, 'wk1_cost':210, 'wk2_qty':3, 'wk2_amount':300, 'wk2_cost':210, 'wk3_qty':0, 'wk3_amount':0, 'wk3_cost':0, 'wk4_qty':5, 'wk4_amount':550, 'wk4_cost':375, 'wk5_qty':5, 'wk5_amount':500, 'wk5_cost':375} ])
实现代码
下面是完整的解决方案代码,我会一步步解释逻辑:
# 定义函数:获取单个产品的最新有效单位成本 def get_latest_unit_cost(row): # 从最新的周(wk5)往最早的周(wk1)遍历 for week_num in range(5, 0, -1): qty_col = f'wk{week_num}_qty' cost_col = f'wk{week_num}_cost' current_qty = row[qty_col] # 找到第一个非零销量的周,计算单位成本后返回 if current_qty != 0: return row[cost_col] / current_qty # 极端情况:所有周销量都是0,返回None(可根据需求改成0或其他默认值) return None # 给DataFrame新增product_price字段 df2['product_price'] = df2.apply(get_latest_unit_cost, axis=1) # 打印结果 print(df2)
代码逻辑解释
- 倒序遍历周数据:用
range(5, 0, -1)确保我们从最新的wk5开始检查,完全符合“优先最新有效数据”的要求; - 匹配有效数据:对每个周,先检查销量是否非零,一旦找到符合条件的周,就用对应成本除以销量得到单位成本并返回;
- 极端情况处理:如果某个产品所有周的销量都是0,函数会返回
None,你可以根据实际业务需求改成返回0或者其他默认值。
最终输出结果
运行代码后,得到的DataFrame就是你期望的结果:
product wk1_qty wk1_amount wk1_cost wk2_qty wk2_amount wk2_cost wk3_qty wk3_amount wk3_cost wk4_qty wk4_amount wk4_cost wk5_qty wk5_amount wk5_cost product_price 0 iphone11 2 100 60 3 150 90 0 0 0 5 300 160 0 0 0 32.0 1 acer laptop 3 300 210 3 300 210 0 0 0 5 550 375 5 500 375 75.0
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

