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

如何将带WHERE筛选与INTO赋值的SQL转换为等效pandas代码

SAS SQL转Pandas实现方案

你需要转换的SQL是SAS方言版本,核心分为过滤、聚合、变量赋值三个部分,对应实现如下:

过滤条件(WHERE子句)实现

三个过滤规则的对应逻辑:

  • x=1 and y=1:用pandas布尔索引筛选两列等于1的行,多个条件用&连接,每个条件需单独加括号
  • input(code,8.):SAS内置函数,作用是将字符型code转为8字节长度的数值类型,pandas中用pd.to_numeric实现同效转换
  • in (70001:73599):SAS的区间简写语法,等价于数值落在[70001, 73599]闭区间内,用between方法实现即可

过滤代码:

filtered_data = _gm_Qr_bfr_mnt[
    (_gm_Qr_bfr_mnt['x'] == 1)
    & (_gm_Qr_bfr_mnt['y'] == 1)
    & (pd.to_numeric(_gm_Qr_bfr_mnt['code'], errors='raise').between(70001, 73599))
]

如果你的code列本身已经是整数/浮点数类型,可以跳过pd.to_numeric转换,直接对code列调用between方法。

聚合计算+变量赋值(INTO子句)实现

SAS中select 聚合1,聚合2 into :变量1,:变量2的逻辑是按聚合顺序把结果赋值给对应宏变量,pandas中直接在过滤后的数据集上计算后赋值即可:

# 对应count(*)结果,赋值给_cnt_ML_2R
_cnt_ML_2R = filtered_data.shape[0]
# 对应sum(days)结果,赋值给_pd_QL_1R
_pd_QL_1R = filtered_data['days'].sum()

# 如果需要和你之前的写法保持一致返回pd.Series类型,包装一层即可
# _cnt_ML_2R = pd.Series(filtered_data.shape[0])
# _pd_QL_1R = pd.Series(filtered_data['days'].sum())

完整代码

import pandas as pd

# 行过滤
filtered_data = _gm_Qr_bfr_mnt[
    (_gm_Qr_bfr_mnt['x'] == 1)
    & (_gm_Qr_bfr_mnt['y'] == 1)
    & (pd.to_numeric(_gm_Qr_bfr_mnt['code']).between(70001, 73599))
]

# 结果赋值
_cnt_ML_2R = filtered_data.shape[0]
_pd_QL_1R = filtered_data['days'].sum()

内容的提问来源于stack exchange,提问作者anjan paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:03:49