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

如何将指定Pandas查询转换为Polars语法?求解析列创建逻辑

Pandas到Polars的代码转换与逻辑解析

转换后的Polars代码

import polars as pl

df = (
    df
    # 批量添加新列
    .with_columns(
        # 计算网格化纬度ll_lat
        pl.col("lat").floordiv(0.1).mul(0.1).round(1).alias("ll_lat"),
        # 计算网格化经度ll_lon
        pl.col("lon").floordiv(0.1).mul(0.1).round(1).alias("ll_lon"),
        # 生成时间桶temporalBasket
        pl.col("eventtime").cast(pl.Utf8).str.slice(0, 13).alias("temporalBasket")
    )
    # 分组聚合
    .group_by(["ll_lat", "ll_lon", "temporalBasket"])
    .agg(strikes=pl.col("lat").count())
)

列创建逻辑解析

1. 网格化经纬度(ll_lat/ll_lon)

  • Pandas中的df['lat'] // 0.1 * 0.1对应Polars的pl.col("lat").floordiv(0.1).mul(0.1):
    • floordiv(0.1)实现地板除法(和//行为一致),将经纬度按0.1的间隔向下取整;
    • mul(0.1)将取整后的值还原为原量级;
    • round(1)保留1位小数,确保结果格式统一;
    • 最后用alias("ll_lat")指定新列名。

2. 生成时间桶(temporalBasket)

  • Pandas中的df['eventtime'].astype(str).str[:13]对应Polars的pl.col("eventtime").cast(pl.Utf8).str.slice(0, 13):
    • cast(pl.Utf8)将时间类型转换为字符串;
    • str.slice(0, 13)截取字符串前13位(通常对应YYYY-MM-DD HH格式,实现按小时维度的时间分组)。

3. Polars列操作核心逻辑

Polars采用链式调用+表达式系统:

  • 所有列操作通过with_columns批量完成,避免多次修改DataFrame(Polars默认不可变,每次操作返回新对象);
  • 基于pl.col()的表达式可以灵活组合计算逻辑,Polars会自动优化整个计算流水线,在大数据量场景下比Pandas分步赋值更高效;
  • 聚合操作中pl.col("lat").count()与Pandas的('lat', 'count')逻辑完全一致,统计分组内的非空行数(这里用lat列只是作为计数载体,换成任意非空列结果相同)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:05:22