Polars 聚合数据帧的 n 个连续行的惯用方法

问题描述 投票:0回答:1

我是 Polars 新手,我最终编写了这段代码来计算

n
行段上的一些聚合表达式:

import polars as pl

df = pl.DataFrame({"a": [1, 1, 3, 8, 62, 535, 4213]})

(
    df.with_columns(index=pl.int_range(pl.len(), dtype=pl.Int32))
    .group_by_dynamic(index_column="index", every="3i")
    .agg(pl.col("a").mean())
)

对于示例,我为

n==3
行设置
7
,但对于大约
n
行的多列数据框,请考虑约
100
的较小
10**6

我想知道这是否是进行此类操作的惯用方式。 不知何故,在

group_by_dynamic
范围内的
Int32
对我来说似乎有点过分了:我想知道是否有更直接的方法来进行相同的聚合。

aggregate python-polars
1个回答
0
投票

group_by_dynamic
允许一行成为多个组的成员,这在您的情况下并不是真正需要的。

你可能可以做这样的事情(只需将创建索引的方式更改为更Pythonic的方式):

(
    df.with_columns(index=pl.Series([1,1,1,2,2,2,3]))
    .group_by('index')
    .agg(pl.col("a").mean())
)

┌───────┬────────────┐
│ index ┆ a          │
│ ---   ┆ ---        │
│ i64   ┆ f64        │
╞═══════╪════════════╡
│ 1     ┆ 1.666667   │
│ 3     ┆ 4213.0     │
│ 2     ┆ 201.666667 │
└───────┴────────────┘
© www.soinside.com 2019 - 2024. All rights reserved.