Filteren en aggregeren per periode

Data transformatie met Polars

Liam Brannigan

Data Scientist & Polars Contributor

Specifieke prijzen vinden

Tabel met tijdreeksgegevens

Data transformatie met Polars

Specifieke prijzen vinden

Tabel met tijdreeksgegevens met 1 gemarkeerde rij

Data transformatie met Polars

Specifieke prijzen vinden

Tabel met tijdreeksgegevens met 3 gemarkeerde rijen

Data transformatie met Polars

Filteren met pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Taak: vind de prijzen om 12:00 op 5 juli
Data transformatie met Polars

Filteren met pl.datetime

prices.filter(
    pl.col("time") == 
)
Data transformatie met Polars

Filteren met pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Data transformatie met Polars

Filteren met 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 |
Data transformatie met Polars

Filteren op datum met pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Data transformatie met Polars

Filteren op datum met pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
Data transformatie met Polars

Filteren op datum met 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   |
Data transformatie met Polars

Filteren op een datetime-bereik

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


    )
)
Data transformatie met Polars

Filteren op een datetime-bereik

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
Data transformatie met Polars

Filteren op een datetime-bereik

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 |
Data transformatie met Polars

Aggregatie per periode

Rijen om te aggregeren in tijdvensters

  • Aggregeer met .group_by_dynamic()
Data transformatie met Polars

Aggregatie per periode

prices.sort("time")


Data transformatie met Polars

Aggregatie per periode

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


Data transformatie met Polars

Aggregatie per periode

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


Data transformatie met Polars

Aggregatie per 6-uurvensters

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

)
Data transformatie met Polars

Aggregatie per 6-uurvensters

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
Data transformatie met Polars

Aggregatie per 6-uurvensters

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      |
Data transformatie met Polars

Aggregatie per dag

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

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
Data transformatie met Polars

Aggregatie per dag

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     |
Data transformatie met Polars

Venstergrootte regelen

  • every - hoe vaak een nieuw venster start
  • period - de lengte van elk venster
  • Standaard is period gelijk aan every
Data transformatie met Polars

Venstergrootte regelen

prices.group_by_dynamic("time", every="2h")
Data transformatie met Polars

Venstergrootte regelen

Niet-overlappende vensters van 2 uur

Data transformatie met Polars

Venstergrootte regelen

prices.group_by_dynamic("time", every="1h", period="2h")
Data transformatie met Polars

Venstergrootte regelen

Eerste overlappend venster start om 10

Data transformatie met Polars

Venstergrootte regelen

Tweede overlappend venster start om 11

Data transformatie met Polars

Laten we oefenen!

Data transformatie met Polars

Preparing Video For Download...