如何用Pandas高效生成季度各周库存剩余量计算列
高效生成Pandas季度每周库存剩余列的方法
需求说明
现有Pandas DataFrame包含物料季度预测用量、当前库存,已通过qty/13算出每周消耗量weekly,需要快速生成对应季度13周的库存剩余列,替代手动逐个添加列的低效方式。
示例数据构造
先还原你的示例数据集,方便后续测试:
import pandas as pd data = { 'item_number': ['M17-4R1.0', 'M17-4R1.25', 'M17-4R1.375', 'M17-4R1.5', 'M17-4R1.625', 'M17-4R.369', 'M17-4R.375'], 'qty': [20.79, 22.24, 36.12, 74.29, 46.35, 86.79, 87.36], 'quarter': [2]*7, 'onhand': [32.00, -42.02, 77.72, 134.12, 63.10, 16.00, 702.72], 'weekly': [1.59884615384615, 1.71075384615385, 2.7782, 5.71446923076924, 3.56513076923077, 6.67630769230769, 6.72026153846154] } df = pd.DataFrame(data)
解决方案
方法1:循环生成(简单直观)
适合数据量较小的场景,代码可读性强:
# 遍历1-13周,生成对应库存列 for week in range(1, 14): df[f'week_{week}_inventory'] = df['onhand'] - df['weekly'] * week
方法2:向量化广播(高效性能)
利用Pandas的向量化操作,避免循环,数据量大时性能更优:
# 生成1-13周的序列 weeks = range(1, 14) # 构造周数矩阵,与原数据行数匹配 week_matrix = pd.DataFrame([weeks]*len(df), index=df.index) # 广播计算所有周的库存剩余 inventory_matrix = df['onhand'].values[:, None] - df['weekly'].values[:, None] * week_matrix # 重命名列并合并到原DataFrame inventory_matrix.columns = [f'week_{w}_inventory' for w in weeks] df = pd.concat([df, inventory_matrix], axis=1)
结果说明
两种方法都会生成week_1_inventory至week_13_inventory共13列,每列对应当周结束后的剩余库存,计算逻辑完全符合当前库存 - 每周消耗量 × 周数的需求。
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

