如何将含窗口函数的SQL代码转换为Python Pandas脚本?
Pandas实现SQL滚动求和窗口函数
你要实现的SQL逻辑是按category1和category2分组,按year、month排序后,计算当前行及前7行的sales总和,用Pandas可以这么做:
步骤拆解
- SQL里的
partition by category1, category2对应Pandas的groupby(["category1", "category2"]) order by year, month需要先对数据按分组键+排序键排序,保证滚动窗口的计算顺序正确rows between 7 preceding and current row是滚动窗口,窗口范围包含当前行及往前7行(共8行),对应Pandas的rolling(window=8)
完整代码示例
import pandas as pd # 加载数据,替换成你的实际数据加载方式(比如读CSV、数据库等) df = pd.read_csv("your_data_source.csv") # 1. 先按分组列+排序列排序,确保窗口计算顺序符合SQL逻辑 df_sorted = df.sort_values(by=["category1", "category2", "year", "month"]) # 2. 分组后应用滚动求和,生成目标列 df_sorted["new_col"] = df_sorted.groupby(["category1", "category2"])["sales"]\ .rolling(window=8, closed="right")\ .sum()\ .reset_index(drop=True) # 最终df_sorted中的new_col就是SQL语句里的new_col
注意事项
closed="right"表示窗口包含当前行,和SQL中current row的逻辑对齐,显式指定更稳妥- 如果分组内的行数不足8行(比如前7条数据),滚动求和会返回
NaN,这和SQL的行为一致(仅计算现有行的总和) - 排序是必须步骤!如果跳过排序,分组后的滚动窗口会按原数据顺序计算,结果不符合预期
内容的提问来源于stack exchange,提问作者Raven Smith
相关产品推荐
相关产品推荐

