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

Polars DataFrame标签组合时间序列的高效min/max统计计算方案

高效计算Polars DataFrame标签组合统计量的方案

原实现通过多次过滤、拼接处理单个标签组合,在大数据量或标签数量较多时会重复扫描数据,导致效率低下。以下是更高效的优化方案,仅需几次核心操作即可完成需求:

优化代码实现

import polars as pl
from datetime import date
from itertools import combinations

# 原始数据集
df = pl.DataFrame(
    {
        "date": [date(2024, 1, 1), date(2024, 1, 2), date(2024, 1, 3)] * 3,
        "label": ["A"] * 3 + ["B"] * 3 + ["C"] * 3,
        "value": [1, 4, 2, 1, -3, 0, 1, 2, 3],
    }
)

# 1. 透视表转换:按date对齐所有标签值
pivoted_df = df.pivot(index="date", columns="label", values="value")

# 2. 生成所有不重复的两两标签组合
labels = pivoted_df.columns[1:]  # 排除date列
label_pairs = list(combinations(labels, 2))

# 3. 批量计算每个组合的min和max
result = pl.concat([
    pivoted_df.select(
        pl.lit(f"{pair[0]}+{pair[1]}").alias("literal"),
        (pl.col(pair[0]) + pl.col(pair[1])).min().alias("min"),
        (pl.col(pair[0]) + pl.col(pair[1])).max().alias("max")
    )
    for pair in label_pairs
])

print(result)

核心优化点

  • 一次性数据对齐:通过pivot操作将所有标签的数据按date聚合到同一行,避免了多次过滤、拼接带来的重复数据扫描,这是提升效率的关键。
  • 动态生成组合:利用itertools.combinations自动生成所有不重复的两两标签组合,无需手动为每个组合编写硬编码逻辑,适配任意数量的标签场景。
  • 批量统计计算:基于已对齐的透视表,直接对每个标签组合的列进行求和后计算min/max,计算逻辑简洁高效。

输出验证

运行代码后将得到与预期一致的结果:

shape: (3, 3)
┌─────────┬─────┬─────┐
│ literal ┆ min ┆ max │
│ ---     ┆ --- ┆ --- │
│ str     ┆ i64 ┆ i64 │
╞═════════╪═════╪═════╡
│ A+B     ┆ 1   ┆ 2   │
│ A+C     ┆ 2   ┆ 6   │
│ B+C     ┆ -1  ┆ 3   │
└─────────┴─────┴─────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:07:35