如何实现从当前行开始的行级值向后聚合求和
反向累计求和(当前行至末行的VALUE总和)
原始数据表
| ID | VALUE |
|---|---|
| 1 | 200 |
| 2 | 300 |
| 3 | 100 |
| 4 | 50 |
| 5 | 1000 |
| 6 | 20 |
期望输出
| ID | VALUE | AGG_VAL |
|---|---|---|
| 1 | 200 | 1670 |
| 2 | 300 | 1470 |
| 3 | 100 | 1170 |
| 4 | 50 | 1070 |
| 5 | 1000 | 1020 |
| 6 | 20 | 20 |
以下是几种常用工具的实现方案:
SQL 实现(适用于MySQL 8.0+/PostgreSQL/SQL Server等支持窗口函数的数据库)
利用窗口函数SUM() OVER()指定窗口范围为当前行至末行:
SELECT ID, VALUE, SUM(VALUE) OVER (ORDER BY ID ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS AGG_VAL FROM your_table ORDER BY ID ASC;
Python Pandas 实现
通过反转序列后累计求和再反转回来,或者直接用反向扩展窗口求和:
import pandas as pd # 构造数据 df = pd.DataFrame({ 'ID': [1,2,3,4,5,6], 'VALUE': [200,300,100,50,1000,20] }) # 方法1:反转后累计求和再反转 df['AGG_VAL'] = df['VALUE'][::-1].cumsum()[::-1] # 方法2:反向扩展窗口求和 # df['AGG_VAL'] = df['VALUE'].iloc[::-1].expanding().sum().iloc[::-1] print(df)
Excel 实现
假设数据从A1单元格开始(A1为ID表头,B1为VALUE表头),在C2单元格输入以下公式后下拉填充:
=SUM(B2:$B$7)
内容的提问来源于stack exchange,提问作者Sayandip Ghatak
相关产品推荐
相关产品推荐

