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

在Polars中实现分组后组内元素减组均值的等效代码(对应Pandas实现)

在Polars中实现分组后组内元素减组均值的等效代码(对应Pandas实现)

嘿,我来帮你搞定这个Polars的等效代码问题!

你在Pandas里的代码是对b、c列做组内(按a分组)的均值中心化——也就是每列的元素减去对应组的均值,最后把结果替换回原列对吧?在Polars里,因为它是表达式优先的设计,所以不能直接像Pandas那样用DataFrame的sub方法,得用表达式语法来实现,不过其实更简洁高效。

直接给你两种可行的写法:

写法一:逐个列定义表达式

import polars as pl

# 假设你的Polars DataFrame叫df
df = df.with_columns(
    (pl.col("b") - pl.col("b").mean().over("a")).alias("b"),
    (pl.col("c") - pl.col("c").mean().over("a")).alias("c")
)

写法二:批量处理列更简洁

如果要处理的列比较多,用列表推导式批量生成表达式更省事:

df = df.with_columns(
    [pl.col(col) - pl.col(col).mean().over("a") for col in ["b", "c"]]
)

为什么这么写?

这里的核心是over("a")——它相当于告诉Polars:计算mean()的时候,要按a列的值分组来算。然后我们把原列减去这个组内均值,用alias指定原来的列名,这样就会直接替换原DataFrame里的b、c列,最终输出的就是和你Pandas代码结果一致的完整DataFrame,而不是分组后的版本。

你之前尝试用sub遇到问题,是因为Polars的DataFrame方法更偏向于表达式输入,而上面这种写法完全贴合Polars的设计思路,还能充分发挥它的向量化性能优势~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 07:12:57