Polars如何基于列表中的列名对指定列求和生成新列
Polars 对列表存储的多列批量求和生成新列
当待求和的列名统一存储在列表中时,不需要手动逐列写相加表达式,可直接用Polars内置的横向求和方法实现,也支持自定义表达式累加的写法,具体如下:
方法1:使用内置
pl.sum_horizontal()(推荐)
这个方法是Polars专门为行级横向求和设计的,直接传入列名列表即可,代码最简洁:import polars as pl # 构造示例数据 df = pl.DataFrame({ "col1": [1, 2, 3], "col2": [4, 5, 6], "col3": [7, 8, None] }) # 待求和的列名列表 target_cols = ["col1", "col2", "col3"] # 横向求和生成新列,默认自动跳过空值 df = df.with_columns( pl.sum_horizontal(target_cols).alias("new_colname") )如果要求所有待求和列都非空才返回求和结果,只要加
ignore_nulls=False参数即可:pl.sum_horizontal(target_cols, ignore_nulls=False).alias("new_colname")方法2:表达式累加(适合需要自定义运算逻辑的场景)
如果除了简单求和还需要叠加其他计算逻辑,可以把列表内的列名批量转为pl.col对象,用Python内置sum函数累加表达式:df = df.with_columns( sum(pl.col(c) for c in target_cols).alias("new_colname") )
注意:你给出的示例代码存在括号位置错误,别名
.alias()需要包裹整个求和表达式,而不是只加在最后一个列对象上,否则别名只会绑定到最后一列,求和逻辑会不符合预期。错误写法:pl.col('colname1') + pl.col('colname2').alias('new_colname'),正确写法:(pl.col('colname1') + pl.col('colname2')).alias('new_colname')
内容的提问来源于stack exchange,提问作者Glenn Pierce
相关产品推荐
相关产品推荐

