You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Polars布尔DataFrame掩码修改或重建DataFrame

使用布尔DataFrame作为掩码操作Polars目标DataFrame

示例1:替换目标DataFrame中指定条件的数值

需求:将目标DataFrame里amount列中大于270的数值替换为1000。

代码实现

import polars as pl

# 初始化测试DataFrame
df = pl.DataFrame({
    "amount": [250, 300, 200, 350],
    "value": [10, 20, 30, 40]
})

# 生成布尔掩码DataFrame(仅针对amount列)
mask = df.select(pl.col("amount") > 270)

# 应用掩码完成值替换
df_updated = df.with_columns(
    pl.when(mask.to_series()).then(1000).otherwise(pl.col("amount")).alias("amount")
)

print(df_updated)

输出结果

shape: (4, 2)
┌────────┬───────┐
│ amount ┆ value │
│ ---    ┆ ---   │
│ i64    ┆ i64   │
╞════════╪═══════╡
│ 250    ┆ 10    │
│ 1000   ┆ 20    │
│ 200    ┆ 30    │
│ 1000   ┆ 40    │
└────────┴───────┘

如果需要对全DataFrame所有列的对应掩码位置替换(掩码为同维度布尔DataFrame),可通过循环遍历列实现:

# 生成同维度的布尔掩码DataFrame
full_mask = pl.DataFrame({
    "amount": [False, True, False, True],
    "value": [True, False, True, False]
})

# 批量替换所有列中掩码为True的位置的值
df_full_updated = df.with_columns([
    pl.when(full_mask[col]).then(1000).otherwise(pl.col(col)).alias(col)
    for col in df.columns
])

示例2:用同维度布尔掩码筛选对应位置的值

需求:保留目标DataFrame中与布尔掩码True位置对应的值,False位置转为None(空值)。

代码实现

import polars as pl

# 初始化测试DataFrame和同维度布尔掩码
df = pl.DataFrame({
    "amount": [250, 300, 200, 350],
    "value": [10, 20, 30, 40]
})

mask = pl.DataFrame({
    "amount": [True, False, True, False],
    "value": [False, True, False, True]
})

# 应用掩码筛选值
df_filtered = df.with_columns([
    pl.col(col).when(mask[col]).otherwise(None).alias(col)
    for col in df.columns
])

print(df_filtered)

输出结果

shape: (4, 2)
┌────────┬───────┐
│ amount ┆ value │
│ ---    ┆ ---   │
│ i64    ┆ i64   │
╞════════╪═══════╡
│ 250    ┆ null  │
│ null   ┆ 20    │
│ 200    ┆ null  │
│ null   ┆ 40    │
└────────┴───────┘

如果需要筛选整行(仅保留所有列掩码都为True的行),可直接使用all_horizontal()结合where:

# 筛选所有列掩码都为True的行
df_row_filtered = df.where(mask.all_horizontal())

内容的提问来源于stack exchange,提问作者BigChief

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:03:27