Python实现按SKU&Plant分组累计扣减库存的循环函数需求
解决SKU+Plant分组的库存累计扣减问题
嘿,这个需求用Python的pandas库处理最方便了,完全不用写复杂的循环,用分组和向量化操作就能高效搞定。下面是具体实现步骤:
1. 准备环境与示例数据
首先导入pandas,然后构造你的示例数据集:
import pandas as pd # 你的原始数据集 data = { 'SKU': [5455, 5455, 5455, 5455], 'Plant': [989, 989, 990, 990], 'Order': [2, 15, 10, 20], 'Stock': [90, 90, 80, 80] } df = pd.DataFrame(data)
2. 分组计算累计扣减库存
核心思路是按SKU+Plant分组,先计算每个组内的累计订单量,再用初始库存减去累计订单量得到剩余库存:
# 计算每个SKU+Plant组内的累计订单量 df['Cumulative_Order'] = df.groupby(['SKU', 'Plant'])['Order'].cumsum() # 用每个组的初始库存(第一行的Stock值)减去累计订单量,更新Stock列 df['Stock'] = df.groupby(['SKU', 'Plant'])['Stock'].transform('first') - df['Cumulative_Order'] # 可选:删除中间的累计订单列(如果不需要保留的话) df = df.drop('Cumulative_Order', axis=1)
3. 查看结果
运行完上面的代码后,df的输出就是你期望的效果:
| SKU | Plant | Order | Stock | |
|---|---|---|---|---|
| 0 | 5455 | 989 | 2 | 88 |
| 1 | 5455 | 989 | 15 | 73 |
| 2 | 5455 | 990 | 10 | 70 |
| 3 | 5455 | 990 | 20 | 50 |
为什么这么做?
groupby(['SKU', 'Plant'])确保我们只在同一个零件+同一个地点的范围内计算,不会跨组混淆数据;transform('first')能获取每个组的初始库存值(因为你的原始数据里每个组的Stock都是重复的初始值);cumsum()会按组内的行顺序累计订单数量,完美实现“依次扣减”的需求;- 全程用pandas的向量化操作,比手写循环快得多,尤其是处理大数据集的时候。
内容的提问来源于stack exchange,提问作者BossRoyce
相关产品推荐
相关产品推荐

