如何在使用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
相关产品推荐
相关产品推荐

