我有一个很大的DF(60M行),我需要进行一些分组和聚合
这是一个与我的数据类似的示例
dic = {
'Attr1' : ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'],
'Attr2' : ['X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y', 'X', 'X', 'Y', 'Y'],
'Val1' : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
}
df = pl.DataFrame(dic)
df
shape: (12, 3)
┌───────┬───────┬──────┐
│ Attr1 ┆ Attr2 ┆ Val1 │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═══════╪═══════╪══════╡
│ A ┆ X ┆ 1 │
│ A ┆ X ┆ 2 │
│ A ┆ Y ┆ 3 │
│ A ┆ Y ┆ 4 │
│ … ┆ … ┆ … │
│ C ┆ X ┆ 9 │
│ C ┆ X ┆ 10 │
│ C ┆ Y ┆ 11 │
│ C ┆ Y ┆ 12 │
└───────┴───────┴──────┘
我正在try 使用每个Attr1和Attr2的分组来获取每个Attr1的最大值
df.group_by(
['Attr1' , 'Attr2'], maintain_order=True
).agg(
pl.col('Attr1').count().alias('count'),
pl.col('Val1').max().alias('MAX')
)
shape: (6, 4)
┌───────┬───────┬───────┬─────┐
│ Attr1 ┆ Attr2 ┆ count ┆ MAX │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ u32 ┆ i64 │
╞═══════╪═══════╪═══════╪═════╡
│ A ┆ X ┆ 2 ┆ 2 │
│ A ┆ Y ┆ 2 ┆ 4 │
│ B ┆ X ┆ 2 ┆ 6 │
│ B ┆ Y ┆ 2 ┆ 8 │
│ C ┆ X ┆ 2 ┆ 10 │
│ C ┆ Y ┆ 2 ┆ 12 │
└───────┴───────┴───────┴─────┘
但我需要获得以下输出
shape: (6, 4)
┌───────┬───────┬───────┬─────┐
│ Attr1 ┆ Attr2 ┆ count ┆ MAX │
│ --- ┆ --- ┆ --- ┆ --- │
│ str ┆ str ┆ u32 ┆ i64 │
╞═══════╪═══════╪═══════╪═════╡
│ A ┆ X ┆ 2 ┆ 4 │
│ A ┆ Y ┆ 2 ┆ 4 │
│ B ┆ X ┆ 2 ┆ 8 │
│ B ┆ Y ┆ 2 ┆ 8 │
│ C ┆ X ┆ 2 ┆ 12 │
│ C ┆ Y ┆ 2 ┆ 12 │
└───────┴───────┴───────┴─────┘
我可以将DF分成两个DF,然后分组,然后合并,但我正在寻找最佳的优化解决方案,以实现高性能和低内存成本.
提前谢谢你