如何将Polars表达式列表转换为单个多列表达式?
Polars批量处理表达式列表的简洁方案
先看场景:我们已经生成了一个表达式列表,用来计算列a的1到5次幂:
# polars==0.19.2 import polars as pl N = 5 powers_list = [(pl.col("a") ** i).alias(f"a{i}") for i in range(1, N + 1)] df = pl.DataFrame({"a": [0, 1, 2]})
通常我们会遍历列表,给每个表达式加上10:
df = df.with_columns([expr + 10 for expr in powers_list]) print(df)
如果你想省去手动遍历的步骤,实现类似pl.to_expr(powers_list)的批量操作效果,用Polars的内置方法就能搞定:
方案1:用pl.select+pl.all()批量操作
df = df.with_columns( pl.select(*powers_list).select(pl.all() + 10) ) print(df)
方案2:封装辅助函数模拟pl.to_expr
如果你习惯用类似假函数pl.to_expr的写法,可以自己封装一个简单的辅助函数:
def to_expr(expr_list): return pl.select(*expr_list) powers_expr = to_expr(powers_list) df = df.with_columns(powers_expr.select(pl.all() + 10)) print(df)
两种方式都能避免手动写列表推导,实现对表达式列表的批量操作,效果和遍历完全一致。
内容的提问来源于stack exchange,提问作者Stas Stepanov
相关产品推荐
相关产品推荐

