我是 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
对我来说似乎有点过分了:我想知道是否有更直接的方法来进行相同的聚合。
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 │
└───────┴────────────┘