用另一列填充一列的“空”值
Filling `null` values of a column with another column
我想用 Polars 惰性数据框中同一行另一列的内容填充一列的 null
值。
在合理的性能下这可能吗?
我刚刚找到了一个可能的解决方案:
df.with_column(
pl.when(pl.col("c").is_null())
.then(pl.col("b"))
.otherwise(pl.col("a")).alias("a")
)
有一个函数:fill_null
。
假设我们有以下数据:
import polars as pl
df = pl.DataFrame({'a': [1, None, 3, 4],
'b': [10, 20, 30, 40]
}).lazy()
print(df.collect())
shape: (4, 2)
┌──────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞══════╪═════╡
│ 1 ┆ 10 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ null ┆ 20 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 30 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ 4 ┆ 40 │
└──────┴─────┘
我们可以用b列的值填充a列的空值:
df.with_column(pl.col('a').fill_null(pl.col('b'))).collect()
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 10 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 20 ┆ 20 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 30 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 4 ┆ 40 │
└─────┴─────┘
这个性能会很不错
我想用 Polars 惰性数据框中同一行另一列的内容填充一列的 null
值。
在合理的性能下这可能吗?
我刚刚找到了一个可能的解决方案:
df.with_column(
pl.when(pl.col("c").is_null())
.then(pl.col("b"))
.otherwise(pl.col("a")).alias("a")
)
有一个函数:fill_null
。
假设我们有以下数据:
import polars as pl
df = pl.DataFrame({'a': [1, None, 3, 4],
'b': [10, 20, 30, 40]
}).lazy()
print(df.collect())
shape: (4, 2)
┌──────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞══════╪═════╡
│ 1 ┆ 10 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ null ┆ 20 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 30 │
├╌╌╌╌╌╌┼╌╌╌╌╌┤
│ 4 ┆ 40 │
└──────┴─────┘
我们可以用b列的值填充a列的空值:
df.with_column(pl.col('a').fill_null(pl.col('b'))).collect()
shape: (4, 2)
┌─────┬─────┐
│ a ┆ b │
│ --- ┆ --- │
│ i64 ┆ i64 │
╞═════╪═════╡
│ 1 ┆ 10 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 20 ┆ 20 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 3 ┆ 30 │
├╌╌╌╌╌┼╌╌╌╌╌┤
│ 4 ┆ 40 │
└─────┴─────┘
这个性能会很不错