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

如何在Polars DataFrame中按分组计算累积均值与标准差?

在Polars中按分组计算累积均值与累积标准差的简洁方法

Polars已经提供了内置的cum_mean()和cum_std()函数,结合over()子句就能轻松实现分组的累积均值与标准差计算,完全不需要手动通过累积求和除以计数这种繁琐且易出错的方式。

1. 分组累积均值的简洁实现

直接使用cum_mean()配合over('class')即可替代手动计算,代码更简洁且结果一致:

import polars as pl

df = pl.DataFrame({
    'value': [4, 6, 8, 11, 5, 6, 8, 15],
    'class': ['A', 'A', 'B', 'A', 'B', 'A', 'B', 'B']
})

# 计算分组累积均值
result = df.with_columns(
    cum_mean=pl.col('value').cum_mean().over('class')
)

print(result)

运行后输出和手动实现的结果完全一致:

shape: (8, 3)
┌───────┬───────┬──────────┐
│ value ┆ class ┆ cum_mean │
│ ---   ┆ ---   ┆ ---      │
│ i64   ┆ str   ┆ f64      │
╞═══════╪═══════╪══════════╡
│ 4     ┆ A     ┆ 4.0      │
│ 6     ┆ A     ┆ 5.0      │
│ 8     ┆ B     ┆ 8.0      │
│ 11    ┆ A     ┆ 7.0      │
│ 5     ┆ B     ┆ 6.5      │
│ 6     ┆ A     ┆ 6.75     │
│ 8     ┆ B     ┆ 7.0      │
│ 15    ┆ B     ┆ 9.0      │
└───────┴───────┴──────────┘

2. 分组累积标准差的实现

使用内置的cum_std()函数,结合over()即可完成分组累积标准差计算。注意ddof参数:

  • ddof=1(默认):计算样本标准差(除以n-1)
  • ddof=0:计算总体标准差(除以n)

示例代码:

result = df.with_columns(
    cum_mean=pl.col('value').cum_mean().over('class'),
    cum_std_pop=pl.col('value').cum_std(ddof=0).over('class'),  # 总体标准差
    cum_std_sample=pl.col('value').cum_std(ddof=1).over('class')  # 样本标准差
)

print(result)

运行输出:

shape: (8, 4)
┌───────┬───────┬──────────┬────────────┬──────────────┐
│ value ┆ class ┆ cum_mean ┆ cum_std_pop ┆ cum_std_sample │
│ ---   ┆ ---   ┆ ---      ┆ ---        ┆ ---            │
│ i64   ┆ str   ┆ f64      ┆ f64        ┆ f64            │
╞═══════╪═══════╪══════════╪════════════╪════════════════╡
│ 4     ┆ A     ┆ 4.0      ┆ 0.0        ┆ null           │
│ 6     ┆ A     ┆ 5.0      ┆ 1.0        ┆ 1.41421356     │
│ 8     ┆ B     ┆ 8.0      ┆ 0.0        ┆ null           │
│ 11    ┆ A     ┆ 7.0      ┆ 3.05505046 ┆ 3.60555128     │
│ 5     ┆ B     ┆ 6.5      ┆ 1.5        ┆ 2.12132034     │
│ 6     ┆ A     ┆ 6.75     ┆ 2.75378527 ┆ 3.10912635     │
│ 8     ┆ B     ┆ 7.0      ┆ 1.52752523 ┆ 1.73205081     │
│ 15    ┆ B     ┆ 9.0      ┆ 3.87298335 ┆ 4.30116263     │
└───────┴───────┴──────────┴────────────┴──────────────┘

注:当分组内只有1个元素时,样本标准差(ddof=1)会返回null,因为分母为0,这是合理的数学结果。

优势说明

  • 内置函数经过Polars官方优化,计算效率更高
  • 避免手动计算累积求和、计数、方差展开等步骤,减少出错概率
  • 代码可读性更强,语义清晰

内容的提问来源于stack exchange,提问作者Phil-ZXX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:23:14