Nach Zeitraum filtern und aggregieren

Daten­transformation mit Polars

Liam Brannigan

Data Scientist & Polars Contributor

Bestimmte Preise finden

Tabelle mit Zeitreihendaten

Daten­transformation mit Polars

Bestimmte Preise finden

Tabelle mit Zeitreihendaten, 1 Zeile markiert

Daten­transformation mit Polars

Bestimmte Preise finden

Tabelle mit Zeitreihendaten, 3 Zeilen markiert

Daten­transformation mit Polars

Filtern mit pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Aufgabe: Finde die Preise am 5. Juli um 12 Uhr
Daten­transformation mit Polars

Filtern mit pl.datetime

prices.filter(
    pl.col("time") == 
)
Daten­transformation mit Polars

Filtern mit pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Daten­transformation mit Polars

Filtern mit pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(year=2025, month=7, day=5, hour=12)
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 12:00:00 | 0.0   | 462.0 |
Daten­transformation mit Polars

Nach Datum filtern mit pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Daten­transformation mit Polars

Nach Datum filtern mit pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
Daten­transformation mit Polars

Nach Datum filtern mit pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 00:00:00 | 34.2  | 0.0   |
| 2025-07-05 01:00:00 | 28.7  | 0.0   |
| ...                 | ...   | ...   |
| 2025-07-05 23:00:00 | 72.3  | 0.0   |
Daten­transformation mit Polars

Einen Datetime-Bereich filtern

prices.filter(
    pl.col("time").is_between(


    )
)
Daten­transformation mit Polars

Einen Datetime-Bereich filtern

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
Daten­transformation mit Polars

Einen Datetime-Bereich filtern

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
| time                | price | solar |
| ---                 | ---   | ---   |
| datetime[µs]        | f64   | f64   |
|---------------------|-------|-------|
| 2025-07-05 08:00:00 | 1.7   | 180.0 |
| 2025-07-05 09:00:00 | 1.3   | 243.0 |
| ...                 | ...   | ...   |
| 2025-07-05 17:00:00 | 77.8  | 153.0 |
| 2025-07-05 18:00:00 | 87.3  | 119.0 |
Daten­transformation mit Polars

Nach Zeitraum aggregieren

Zeilen, die zu Zeitfenstern aggregiert werden

  • Daten mit .group_by_dynamic() aggregieren
Daten­transformation mit Polars

Nach Zeitraum aggregieren

prices.sort("time")


Daten­transformation mit Polars

Nach Zeitraum aggregieren

prices.sort("time").group_by_dynamic("time",          )


Daten­transformation mit Polars

Nach Zeitraum aggregieren

prices.sort("time").group_by_dynamic("time", every="6h")


Daten­transformation mit Polars

Aggregieren in 6‑Stunden‑Fenstern

prices.sort("time").group_by_dynamic("time", every="6h").agg(

)
Daten­transformation mit Polars

Aggregieren in 6‑Stunden‑Fenstern

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
Daten­transformation mit Polars

Aggregieren in 6‑Stunden‑Fenstern

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
| time                | avg_price |
| ---                 | ---       |
| datetime[µs]        | f64       |
|---------------------|-----------|
| 2025-07-05 00:00:00 | 28.4      |
| 2025-07-05 06:00:00 | 15.2      |
| 2025-07-05 12:00:00 | 42.1      |
| 2025-07-05 18:00:00 | 68.7      |
Daten­transformation mit Polars

Tagesweise aggregieren

prices.sort("time").group_by_dynamic("time", every="1d").agg(

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
Daten­transformation mit Polars

Tagesweise aggregieren

prices.sort("time").group_by_dynamic("time", every="1d").agg(
    pl.col("price").mean().alias("avg_price"),
    pl.col("solar").mean().alias("avg_solar")
)
| time                | avg_price | avg_solar |
| ---                 | ---       | ---       |
| datetime[µs]        | f64       | f64       |
|---------------------|-----------|-----------|
| 2025-07-05 00:00:00 | 36.7      | 147.1     |
| 2025-07-06 00:00:00 | 42.1      | 133.8     |
Daten­transformation mit Polars

Fenstergröße steuern

  • every – wie oft ein neues Fenster startet
  • period – Länge jedes Fensters
  • Standard: period = every
Daten­transformation mit Polars

Fenstergröße steuern

prices.group_by_dynamic("time", every="2h")
Daten­transformation mit Polars

Fenstergröße steuern

Nicht überlappende 2‑Stunden‑Fenster

Daten­transformation mit Polars

Fenstergröße steuern

prices.group_by_dynamic("time", every="1h", period="2h")
Daten­transformation mit Polars

Fenstergröße steuern

Erstes überlappendes Fenster ab 10

Daten­transformation mit Polars

Fenstergröße steuern

Zweites überlappendes Fenster ab 11

Daten­transformation mit Polars

Lass uns üben!

Daten­transformation mit Polars

Preparing Video For Download...