如何使用Polars基于另一列的值填充目标列的空值?
在Polars中用字典映射填充空值的实现方法
你可以通过Polars的向量化操作实现类似Pandas的需求,以下是两种高效的实现方式:
方法一:使用fill_null结合replace
import polars as pl df = pl.DataFrame({ "a":[float("nan"),2,3,float("nan"),5], "b":[1,2,3,4,5], }) mapping={1:1, 2:4, 3:6, 4:8, 5:10} # 用映射后的b列值填充a列空值 df = df.with_columns( pl.col("a").fill_null(pl.col("b").replace(mapping)).alias("a") ) print(df)
方法二:使用when/then/otherwise条件分支
如果需要更直观的逻辑控制,可以用条件表达式:
df = df.with_columns( pl.when(pl.col("a").is_null()) .then(pl.col("b").replace(mapping)) .otherwise(pl.col("a")) .alias("a") )
说明
pl.col("b").replace(mapping)会将b列的数值按照字典映射转换为对应的值,这一步是向量化操作,性能远高于逐行处理的map_elements。- 两种方法最终都会得到你预期的DataFrame结果:
shape: (5, 2) ┌─────┬─────┐ │ a ┆ b │ │ --- ┆ --- │ │ f64 ┆ i64 │ ╞═════╪═════╡ │ 1.0 ┆ 1 │ │ 2.0 ┆ 2 │ │ 3.0 ┆ 3 │ │ 8.0 ┆ 4 │ │ 5.0 ┆ 5 │ └─────┴─────┘
内容的提问来源于stack exchange,提问作者Gabriel Zinato
相关产品推荐
相关产品推荐

