如何在Polars中基于其他列按条件填充新列?
使用Polars实现基于条件添加新列的功能
要实现和你提供的Pandas代码相同的逻辑(新列c默认取a的值,当b等于4时取b的值),Polars可以通过**条件表达式结合with_columns**完成,这也是Polars推荐的向量化操作方式。
实现代码
方法一:直接构建条件列(简洁高效)
import polars as pl # 创建初始DataFrame df = pl.DataFrame({'a': [1, 2], 'b': [3, 4]}) # 添加新列c,应用条件逻辑 df = df.with_columns( pl.when(pl.col('b') == 4) .then(pl.col('b')) .otherwise(pl.col('a')) .alias('c') )
方法二:先赋值默认值再更新(和Pandas逻辑更贴近)
如果你习惯先给新列赋默认值再修改符合条件的行,可以用以下方式:
import polars as pl df = pl.DataFrame({'a': [1, 2], 'b': [3, 4]}) # 先给c赋值为a的默认值 df = df.with_columns(c=pl.col('a')) # 对b==4的行,将c更新为b的值 df = df.with_columns( pl.when(pl.col('b') == 4) .then(pl.col('b')) .otherwise(pl.col('c')) .alias('c') )
执行结果
两种方法执行后都会得到如下结果:
| a | b | c |
|---|---|---|
| 1 | 3 | 1 |
| 2 | 4 | 4 |
逻辑说明
pl.when(condition).then(value).otherwise(default):Polars的条件表达式,会逐行判断条件,满足时返回then的值,否则返回otherwise的值。with_columns:用于向DataFrame添加或修改列,Polars是不可变数据结构,所以需要将返回的新DataFrame重新赋值给变量。
内容的提问来源于stack exchange,提问作者kaz0621
相关产品推荐
相关产品推荐

