You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将含窗口函数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 01:12:05