如何通过循环获取 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 │
└────────┴────────┘}
分组后需要对每个分组做一些比较复杂的处理。
在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 │
└────────┴────────┘}