python-polars - 如何获得极地组中的前 n%?

标签 python-polars rust-polars

  • Q1:在极地铁锈中,当您这样做时.groupby().agg() ,我们可以使用.head(10)获取列中的前 10 个元素。但如果各组的长度不同,我需要先获得 20%每个组中的元素(例如 120 个元素组中的 0-24 个元素)。如何让它发挥作用?

  • Q2:对于如下所示的数据帧示例,我的目标是循环数据帧。因为 Polars 是列专业,所以我将 df 向下转换为 serval ChunkedArrays 并通过 iter().zip() 进行迭代。我发现它比 goupby(col("date")) 之后循环一些列表元素的相同操作更快。那个怎么样? 在我看来,groupby之后df的长度更短,这意味着循环更短。

<表类=“s-表”> <标题> 日期 库存 价格 <正文> 2010-01-01 IBM 1000 2010-01-02 IBM 1001 2010-01-03 IBM 1002 2010-01-01 AAPL 2900 2010-01-02 AAPL 2901 2010-01-03 AAPL 2902

最佳答案

我不太明白你的第二个问题。也许您可以用一个小例子创建另一个问题。

我来回答第一个问题:

we can use head(10) to get the first 10 elements in a col. But if the groups have different length and I need to get first 20% elements in each group like 0-24 elements in a 120 elements group. how to make it work?

我们可以使用表达式获取 head(n),其中 n = 0.2 group_size

df = pl.DataFrame({
    "groups": ["a"] * 10 + ["b"] * 20,
    "values": range(30)
})

(df.groupby("groups")
    .agg(pl.all().head(pl.count() * 0.2))
    .explode(pl.all().exclude("groups"))
)

输出:

shape: (6, 2)
┌────────┬────────┐
│ groups ┆ values │
│ ---    ┆ ---    │
│ str    ┆ i64    │
╞════════╪════════╡
│ a      ┆ 0      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ a      ┆ 1      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ b      ┆ 10     │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ b      ┆ 11     │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ b      ┆ 12     │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ b      ┆ 13     │
└────────┴────────┘

关于python-polars - 如何获得极地组中的前 n%?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71273072/

相关文章:

rust - 在极坐标中加载数据框时如何定义列的类型?

python - 如何获取今天和极地日期之间的天数?

根据另一列的匹配条件更新 Polars 数据框的一列的 Pythonic 方法

rust - 如何使用 Polars Rust 中不同列的字符串长度创建列?

python-polars - 如何在不同运行时之间共享惰性数据帧?

rust - 在 polars rust 中使用 groupby 时如何避免深度复制?

python - Polars 读取文件导致错误

python - 带时间窗口的 Polars 滚动计数

python - 在Python Polars中按列值向前填充

r - Polars Rust Melt() 明显慢于 R stack()