基于前一行balans值计算当前库存weight的实现问题
库存滚动计算实现方案
方法1:Excel/WPS表格实现
- 先把数据按日期降序排序(最新日期在首行,和你提供的样例顺序一致)
- 首行weight保留已知的初始值
- 第二行开始的weight单元格输入公式:
=上一行weight单元格 + 上一行balans单元格,比如表头在第1行、首行数据在第2行,第二行的weight单元格公式为=B2+C2,下拉填充所有行即可
方法2:Python Pandas实现
- 核心逻辑:先按日期降序排序,再用错位累加balans值加初始weight得到结果
- 示例代码:
import pandas as pd # 导入你的数据,这里用样例做演示 df = pd.DataFrame({ 'weight': [500, 0, 0, 0], 'balans': [50, -30, 120, -233], 'date': ['2021-10-15', '2021-10-14', '2021-10-13', '2021-10-12'] }) # 日期格式转换+降序排序,确保顺序正确 df['date'] = pd.to_datetime(df['date']) df = df.sort_values('date', ascending=False).reset_index(drop=True) # 计算滚动库存 initial_weight = df.loc[0, 'weight'] df['weight'] = initial_weight + df['balans'].shift(fill_value=0).cumsum()
方法3:SQL实现(支持窗口函数的数据库,如MySQL8.0+、PostgreSQL等)
WITH sorted_data AS ( SELECT weight, balans, date, ROW_NUMBER() OVER (ORDER BY date DESC) as rn FROM 你的库存表名 ) SELECT CASE WHEN rn = 1 THEN weight ELSE (SELECT weight FROM sorted_data WHERE rn = 1) + SUM(balans) OVER (ORDER BY rn ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) END as weight, balans, date FROM sorted_data ORDER BY rn;
内容的提问来源于stack exchange,提问作者Joey
相关产品推荐
相关产品推荐

