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

Polars DataFrame中按条件选中列并批量赋值列表值的实现方法(对标Pandas的loc操作)

Polars DataFrame中按条件选中列并批量赋值列表值的实现方法(对标Pandas的loc操作)

我来帮你解决这个Polars的赋值问题!你用Pandas的loc操作很顺手,但Polars因为设计理念的不同,写法会有点不一样,下面给你几种可行的实现方式:

方法一:使用when-then-otherwise结合pl.Series

直接用Polars的条件表达式,当满足A='x'时,用你指定的列表转换成的pl.Series来替换C列的值,否则保留原C列的值。代码如下:

df_pl = df_pl.with_columns(
    pl.when(pl.col("A") == "x")
    .then(pl.Series([-1, -2, -3, -4]))
    .otherwise(pl.col("C"))
    .alias("C")
)

注意:这里pl.Series的长度必须和满足条件的行数完全一致(本例中A='x'刚好有4行,和你的列表长度匹配),Polars会自动按顺序对应到满足条件的行上。

方法二:先构建掩码再替换

如果你觉得先明确条件掩码更清晰,也可以先定义掩码,再做替换:

# 先创建条件掩码
mask = df_pl["A"] == "x"
# 准备要替换的新值
new_c_values = pl.Series([-1, -2, -3, -4])

# 执行替换
df_pl = df_pl.with_columns(
    pl.when(mask).then(new_c_values).otherwise(pl.col("C")).alias("C")
)

验证输出

运行上述任意一种方法后,你都会得到预期的输出结果:

┌─────┬─────┬─────┐
│ A   ┆ B   ┆ C   │
│ --- ┆ --- ┆ --- │
│ str ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ x   ┆ 1   ┆ -1  │
│ x   ┆ 1   ┆ -2  │
│ x   ┆ 2   ┆ -3  │
│ x   ┆ 2   ┆ -4  │
│ y   ┆ 1   ┆ 5   │
│ y   ┆ 1   ┆ 6   │
│ y   ┆ 2   ┆ 7   │
│ y   ┆ 2   ┆ 8   │
└─────┴─────┴─────┘

补充说明

Polars默认采用不可变数据模型,同时更强调表达式的向量化操作,这和Pandas的可变数据模型有区别。这种表达式写法不仅能实现你的需求,还能更好地利用Polars的内部优化,在处理大数据量时效率更高。

备注:内容来源于stack exchange,提问作者rindis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 18:09:33