如何通过循环获取 groupby 键?

How to get the groupby keys with a loop?

分组后需要对每个分组做一些比较复杂的处理。 在pandas中,可以这样写:

for i,g in df.groupby(['id','sid']):
    pass

虽然在polars中,groups函数returns一个DataFrame,但是不能方便的应用于for循环。

您可以使用分区依据。这将产生一个 dictionary,其中 groupby 键映射到分区的 DataFrames.

df = pl.DataFrame({
    "groups": [1, 1, 2, 2, 2],
    "values": pl.arange(0, 5, eager=True)
})

part_dfs = df.partition_by("groups", as_dict=True)

print(part_dfs)
{1: shape: (2, 2)
┌────────┬────────┐
│ groups ┆ values │
│ ---    ┆ ---    │
│ i64    ┆ i64    │
╞════════╪════════╡
│ 1      ┆ 0      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 1      ┆ 1      │
└────────┴────────┘,
 2: shape: (3, 2)
┌────────┬────────┐
│ groups ┆ values │
│ ---    ┆ ---    │
│ i64    ┆ i64    │
╞════════╪════════╡
│ 2      ┆ 2      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2      ┆ 3      │
├╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌┤
│ 2      ┆ 4      │
└────────┴────────┘}