如何在Polars中按条件填充ID列的空值?
解决Polars中按条件填充ID列空值的问题
解决方案代码
import polars as pl df = pl.DataFrame( { "ID": [None, "1", None, "1", None], "A": ["foo", "ham", "spam", "egg", "ham"], "L": ["A54", "A12", "B84", "C12", None], "G": ["X34", "C84", "G96", "L6", "C74"], } ) # 获取ID列的唯一有效值 valid_id = df["ID"].drop_nulls().unique().item() # 按条件更新ID列 result_df = df.with_columns( pl.when( pl.all_horizontal(pl.exclude("ID").is_not_null()) & pl.col("ID").is_null() ).then(valid_id).otherwise(pl.col("ID")).alias("ID") ) print(result_df)
代码解释
- 提取唯一有效ID:通过
drop_nulls()过滤ID列空值,unique()确认唯一有效值(符合题目中"有效值均为唯一值"的前提),最后用item()提取具体值。 - 条件判断与填充:
pl.all_horizontal(pl.exclude("ID").is_not_null()):检查当前行除ID外的所有列是否无空值,返回布尔值。- 结合
pl.col("ID").is_null(),仅当「其他列无空值且ID为空」时,用唯一有效ID填充;其余情况保持原ID值不变。
输出结果
shape: (5, 4) ┌──────┬──────┬──────┬─────┐ │ ID ┆ A ┆ L ┆ G │ │ --- ┆ --- ┆ --- ┆ --- │ │ str ┆ str ┆ str ┆ str │ ╞══════╪══════╪══════╪═════╡ │ 1 ┆ foo ┆ A54 ┆ X34 │ │ 1 ┆ ham ┆ A12 ┆ C84 │ │ 1 ┆ spam ┆ B84 ┆ G96 │ │ 1 ┆ egg ┆ C12 ┆ L6 │ │ null ┆ ham ┆ null ┆ C74 │ └──────┴──────┴──────┴─────┘
内容的提问来源于stack exchange,提问作者Horseman
相关产品推荐
相关产品推荐

