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

如何在使用polars.Expr.apply时传递额外参数?

在Polars中使用Expr.apply传递额外参数的方法

有几种实用的方式可以给polars.Expr.apply()传递额外参数,下面是具体实现:

方法1:用Lambda表达式捕获参数

直接在lambda里把额外参数传给自定义函数,这是最直观的方式。

示例代码:

import polars as pl

# 定义带额外参数的自定义函数
def calculate_discount(price, discount_rate):
    return price * (1 - discount_rate)

# 创建示例DataFrame
df = pl.DataFrame({"price": [100, 200, 300]})

# 使用apply传递额外参数(折扣率0.2)
result_df = df.with_columns(
    pl.col("price").apply(lambda x: calculate_discount(x, discount_rate=0.2)).alias("discounted_price")
)

print(result_df)

方法2:用functools.partial包装函数

如果需要重复使用带固定参数的函数,可以用functools.partial预先绑定参数,再传给apply。

示例代码:

import polars as pl
from functools import partial

def calculate_discount(price, discount_rate):
    return price * (1 - discount_rate)

# 预先绑定折扣率参数
discount_with_20 = partial(calculate_discount, discount_rate=0.2)

df = pl.DataFrame({"price": [100, 200, 300]})

result_df = df.with_columns(
    pl.col("price").apply(discount_with_20).alias("discounted_price")
)

print(result_df)

注意事项

  • apply()是逐元素执行Python函数,性能远低于Polars原生表达式(比如pl.col("price") * 0.8),如果能用原生表达式实现逻辑,优先选择原生方式。
  • 如果额外参数是另一个列的值,不要用apply,直接用Polars的列运算即可,比如pl.col("price") * (1 - pl.col("discount_rate"))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:52:32