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

在Polars中按周分组,自动对列聚合min/max/avg并生成列表值

在Polars中自动对多列执行聚合并返回列表结果的实现方法

完全可以实现,无需手动指定列名,Polars提供了灵活的动态列选择和表达式组合能力,以下是具体实现方式:

核心思路

  1. 自动筛选目标列:排除不需要聚合的ts(时间戳)和week列,仅保留传感器数值列
  2. 批量生成聚合表达式:对每个目标列,一次性计算min、max、mean三个指标,并将结果打包为列表

代码实现

方式1:通过列名筛选(直观可控)

import polars as pl

# 示例DataFrame(模拟你的数据结构)
df = pl.DataFrame({
    "ts": pl.date_range(start="2024-01-01", end="2024-01-14", interval="1d"),
    "646150": pl.randn(14),
    "646151": pl.randn(14),
    "week": pl.date_range(start="2024-01-01", end="2024-01-14", interval="1d").dt.week()
})

# 自动聚合逻辑
result = df.group_by("week").agg(
    [
        # 对每个传感器列,将min/max/mean打包为列表
        pl.struct([pl.col(col).min(), pl.col(col).max(), pl.col(col).mean()]).to_list().alias(col)
        for col in df.columns if col not in ["ts", "week"]
    ]
)

print(result)

方式2:通过排除列动态选择(更简洁)

直接使用pl.exclude排除非目标列,无需手动遍历列名,适配任意数量的传感器列:

result = df.group_by("week").agg(
    pl.col(pl.exclude("ts", "week")).map(
        lambda s: pl.struct([s.min(), s.max(), s.mean()]).to_list()
    )
)

结果说明

执行后,每个传感器列的单元格会以[最小值, 最大值, 平均值]的列表形式存储对应周的聚合结果,完全满足无需手动指定列名的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 11:29:56