Hinzufügen einer Aggregation, die alle außer einer Spalte in der Polarengruppe ausschließtPython

Python-Programme
Anonymous
 Hinzufügen einer Aggregation, die alle außer einer Spalte in der Polarengruppe ausschließt

Post by Anonymous »

Ich habe einen großen df (60 Mio. Zeilen) und muss einige Gruppierungen und Aggregationen durchführen
Dies ist ein Beispiel wie meine Daten

Code: Select all

import polars as pl

data = {
'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(data)
df

Code: Select all

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   │
└───────┴───────┴──────┘
Ich versuche, den Maximalwert pro Attr1 mit der Gruppierung pro Attr1 und Attr2 zu erhalten

Code: Select all

df.group_by(
['Attr1' , 'Attr2'], maintain_order=True
).agg(
pl.col('Attr1').count().alias('count'),
pl.col('Val1').max().alias('MAX')
)

Code: Select all

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  │
└───────┴───────┴───────┴─────┘
Aber ich brauche die folgende Ausgabe

Code: Select all

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  │
└───────┴───────┴───────┴─────┘
Ich könnte die DF in zwei DFs aufteilen, dann gruppieren und dann zusammenführen, aber ich suche nach der besten optimierten Lösung für hohe Leistung und niedrige Speicherkosten.
Vielen Dank im Voraus

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post