条件应用
要修改一个 Series
或 DataFrame
中的一列,需要以下两步。
- 基于一些谓词创建一个
boolean
掩码 - 替换掉掩码评估为
True
的值 - (仅当惰性操作时) 定义掩码评估为
False
的值
数据集
import numpy as np
import polars as pl
# 构造数据帧
df = pl.DataFrame({"range": np.arange(10), "left": ["foo"] * 10, "right": ["bar"] * 10})
df.head()
shape: (5, 3)
┌───────┬──────┬───────┐
│ range ┆ left ┆ right │
│ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str │
╞═══════╪══════╪═══════╡
│ 0 ┆ foo ┆ bar │
│ 1 ┆ foo ┆ bar │
│ 2 ┆ foo ┆ bar │
│ 3 ┆ foo ┆ bar │
│ 4 ┆ foo ┆ bar │
└───────┴──────┴───────┘
我们可以使用 .when()
/.then()
/.otherwise()
表达式。
when
- 接受一个谓词表达式then
- 当谓词 == True
时使用的表达式otherwise
- 当谓词 == False
时使用的表达式
请参见以下例子。
q = df.lazy().with_columns(
pl.when(pl.col("range") >= 5).then(pl.col("left")).otherwise(pl.col("right")).alias("foo_or_bar") # .alias增加一列
)
df = q.collect()
print(df)
shape: (10, 4)
┌───────┬──────┬───────┬────────────┐
│ range ┆ left ┆ right ┆ foo_or_bar │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ str ┆ str │
╞═══════╪══════╪═══════╪════════════╡
│ 0 ┆ foo ┆ bar ┆ bar │
│ 1 ┆ foo ┆ bar ┆ bar │
│ 2 ┆ foo ┆ bar ┆ bar │
│ 3 ┆ foo ┆ bar ┆ bar │
│ … ┆ … ┆ … ┆ … │
│ 6 ┆ foo ┆ bar ┆ foo │
│ 7 ┆ foo ┆ bar ┆ foo │
│ 8 ┆ foo ┆ bar ┆ foo │
│ 9 ┆ foo ┆ bar ┆ foo │
└───────┴──────┴───────┴────────────┘