如何在Polars中使用符合条件的行实现向前填充?
解决方案
你可以通过两步实现这个需求:先提取仅flag == 1行的value并向前填充,再用这个填充后的结果替换原value列中的空值。具体代码如下:
import polars as pl df = pl.DataFrame({'value': [1,2,3,4,5,None,None], 'flag': [0,1,1,1,0,0,0]}) result_df = df.with_columns( value=pl.col("value").fill_null( # 仅保留flag=1的value,其余设为null,再向前填充 pl.col("value").where(pl.col("flag") == 1).forward_fill() ) ) print(result_df)
代码解释
pl.col("value").where(pl.col("flag") == 1):生成一个临时列,仅保留flag == 1行的value值,其他行(包括flag == 0的非空值)都设为null。.forward_fill():对上述临时列执行向前填充,这样每个位置都会得到最近的flag == 1行的value值。pl.col("value").fill_null(...):用填充后的临时列值替换原value列中的null,非空值保持不变。
执行后得到的结果符合预期:
┌───────┬──────┐ │ value ┆ flag │ │ --- ┆ --- │ │ i64 ┆ i64 │ ╞═══════╪══════╡ │ 1 ┆ 0 │ │ 2 ┆ 1 │ │ 3 ┆ 1 │ │ 4 ┆ 1 │ │ 5 ┆ 0 │ │ 4 ┆ 0 │ │ 4 ┆ 0 │ └───────┴──────┘
内容的提问来源于stack exchange,提问作者Phil-ZXX
相关产品推荐
相关产品推荐

