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

如何在Python pandas中执行包含partition by的SQL查询

Python pandas实现带窗口函数的SQL查询方案

pandasql报错是因为其底层依赖的低版本SQLite不支持窗口函数,推荐直接使用pandas原生方法实现,性能更优,具体步骤如下:

  • 第一步:执行左连接,匹配SQL的LEFT JOIN逻辑
import pandas as pd

# sales1、sales2为你已有的两个DataFrame
merge_df = pd.merge(
    left=sales1,
    right=sales2,
    on=["sale", "d_id", "month", "p_id"],
    how="left",
    suffixes=("", "_right") # 处理两表重名冲突,右表重复列加_right后缀
)
  • 第二步:计算分组的vol1总和,对应SQL中sum(vol1) over (partition by ...)的窗口逻辑
    groupby+transform会将分组聚合结果广播到分组内的每一行,和窗口函数效果完全一致:
merge_df["group_vol1_sum"] = merge_df.groupby(["sale", "d_id", "month", "p_id"])["vol1"].transform("sum")
  • 第三步:计算目标字段vol_r、vol_t,可添加除零逻辑避免报错
# 将总和为0的情况替换为NA,避免除零错误
merge_df["group_vol1_sum"] = merge_df["group_vol1_sum"].replace(0, pd.NA)
merge_df["vol_r"] = merge_df["vol1"] / merge_df["group_vol1_sum"]
merge_df["vol_t"] = merge_df["vol2"] * merge_df["vol1"] / merge_df["group_vol1_sum"]

# 可选:删除中间计算列,得到最终结果
result = merge_df.drop(columns=["group_vol1_sum"])

如果你坚持使用pandasql执行SQL,可将底层SQLite版本升级到3.25及以上,该版本开始原生支持窗口函数语法。

内容的提问来源于stack exchange,提问作者NITIN KOTHARI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:12:02