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

如何在Polars中通过两列相除创建新列?含LazyFrame高效方案

Polars实现两列相除生成新列(含LazyFrame最优方案)

问题背景

在Pandas中可直接通过两列相除为DataFrame创建新列,如何在Polars中实现相同操作?同时希望获取Polars.LazyFrame的最快实现方式。

Pandas参考实现

import polars as pl

df = pl.DataFrame({"col1":[10,20,30,40,50], "col2":[5,2,10,10,25]})

df_pd = df.to_pandas()
df_pd["ans"] = df_pd["col1"] / df_pd["col2"]

print(pl.from_pandas(df_pd))

预期输出

┌──────┬──────┬──────┐
│ col1 ┆ col2 ┆ ans  │
│ ---  ┆ ---  ┆ ---  │
│ i64  ┆ i64  ┆ f64  │
╞══════╪══════╪══════╡
│ 10   ┆ 5    ┆ 2.0  │
│ 20   ┆ 2    ┆ 10.0 │
│ 30   ┆ 10   ┆ 3.0  │
│ 40   ┆ 10   ┆ 4.0  │
│ 50   ┆ 25   ┆ 2.0  │
└──────┴──────┴──────┘

Polars实现方案

1. Eager模式(即时计算)

Polars的Eager模式可通过with_columns或assign方法直接添加计算后的新列,写法简洁直观:

import polars as pl

df = pl.DataFrame({"col1":[10,20,30,40,50], "col2":[5,2,10,10,25]})

# 方式1:使用列表达式定义计算逻辑
df = df.with_columns((pl.col("col1") / pl.col("col2")).alias("ans"))
print(df)

# 方式2:类似Pandas的assign语法
df = df.assign(ans=pl.col("col1") / pl.col("col2"))
print(df)

2. LazyFrame模式(最优性能方案)

Polars的Lazy模式会先构建查询计划并自动优化,是大数据量场景下的最快实现方式。核心步骤为:创建/转换为LazyFrame → 定义列计算 → 执行收集结果:

import polars as pl

# 直接创建LazyFrame
lf = pl.LazyFrame({"col1":[10,20,30,40,50], "col2":[5,2,10,10,25]})

# 构建查询计划并执行计算
result = lf.with_columns((pl.col("col1") / pl.col("col2")).alias("ans")).collect()
print(result)

若已有Eager DataFrame,可通过.lazy()方法快速转换为LazyFrame:

df = pl.DataFrame({"col1":[10,20,30,40,50], "col2":[5,2,10,10,25]})
lf = df.lazy()
result = lf.with_columns((pl.col("col1") / pl.col("col2")).alias("ans")).collect()
print(result)

两种模式均能得到与预期一致的输出,其中LazyFrame模式借助Polars查询优化器(如谓词下推、列裁剪等),在处理大规模数据时能显著提升执行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:20:21