我是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())
)

在本例中,我为7行设置了n==3,但是对于一个大约10**6行的多列数据帧,我将其设置为大约100的较小的n.

我想知道这是不是做这种手术的惯用方式. 不知何故,在我看来,Int32范围内的group_by_dynamic似乎有些过头了:我在想,是否有更直接的方法来进行同样的聚合.

推荐答案

IMO您使用group_by_dynamic的解决方案在聚合方面已经遵循了最佳实践.

但是,您可以大大简化索引列的创建 使用pl.DataFrame.with_row_index.由于结果是无符号的(并且group_by_dyanmic只允许signed整数索引列),因此需要传递一个表达式进行转换,即.

(
    df
    .with_row_index()
    .group_by_dynamic(index_column=pl.col("index").cast(pl.Int32), every="3i")
    .agg(pl.col("a").mean())
)

Python相关问答推荐

将DF中的名称与另一DF拆分并匹配并返回匹配的公司

抓取rotowire MLB球员新闻并使用Python形成表格

如何使用html从excel中提取条件格式规则列表?

_repr_html_实现自定义__getattr_时未显示

输出中带有南的亚麻神经网络

如何获取TFIDF Transformer中的值?

在Python中管理打开对话框

删除字符串中第一次出现单词后的所有内容

如何在WSL2中更新Python到最新版本(3.12.2)?

Python—从np.array中 Select 复杂的列子集

Pandas Loc Select 到NaN和值列表

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

合并与拼接并举

Gekko中基于时间的间隔约束

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

为什么后跟inplace方法的`.rename(Columns={';b';:';b';},Copy=False)`没有更新原始数据帧?

文本溢出了Kivy的视区

PYTHON中的selenium不会打开 chromium URL

解析CSV文件以将详细信息添加到XML文件

Django REST框架+Django Channel->;[Errno 111]连接调用失败(';127.0.0.1';,6379)