Q1:在极地铁锈中,当您这样做时
.groupby().agg()
,我们可以使用.head(10)
获取列中的前 10 个元素。但如果各组的长度不同,我需要先获得20%
每个组中的元素(例如 120 个元素组中的 0-24 个元素)。如何让它发挥作用?Q2:对于如下所示的数据帧示例,我的目标是循环数据帧。因为 Polars 是列专业,所以我将 df 向下转换为 serval ChunkedArrays 并通过 iter().zip() 进行迭代。我发现它比 goupby(col("date")) 之后循环一些列表元素的相同操作更快。那个怎么样? 在我看来,groupby之后df的长度更短,这意味着循环更短。
最佳答案
我不太明白你的第二个问题。也许您可以用一个小例子创建另一个问题。
我来回答第一个问题:
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/