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
相关产品推荐
相关产品推荐

