如何将指定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
相关产品推荐
相关产品推荐

