请求将指定SQL语句转换为正确的Pandas与Polars代码
SQL转Pandas/Polars行数不符问题修复
原SQL逻辑
SELECT (TRUNC(lat/0.5)*0.5) AS ll_lat, (TRUNC(lon/0.5)*0.5) AS ll_lon, COUNT(lat) AS strikes FROM lightning GROUP BY ll_lat, ll_lon;
你的代码核心问题
- 步长不匹配:SQL按0.5的间隔截断经纬度,你的代码错误使用了0.1
- 多余分组项:SQL未按时间分组,你额外加入了
temporalBasket字段分组,导致行数暴增
正确Pandas实现
# Pandas df['ll_lat'] = (df['lat'] // 0.5 * 0.5).round(1) df['ll_lon'] = (df['lon'] // 0.5 * 0.5).round(1) # 仅按ll_lat和ll_lon分组,移除时间分组项 df = df.groupby(['ll_lat', 'll_lon'], as_index=False).agg(strikes=('lat', 'count'))
正确Polars实现
# Polars df_p_out = df_p.groupby( (pl.col("lat") // 0.5 * 0.5).alias("ll_lat"), (pl.col("lon") // 0.5 * 0.5).alias("ll_lon"), # 移除时间截断的分组项 ).agg(strikes=pl.col("lat").count())
说明
调整后代码完全对齐原SQL逻辑,结果行数会和SQL输出的10168行一致。如果后续需要加入时间维度分组,需确认业务需求,但原SQL未包含该逻辑。
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

