Filtrare e aggregare per periodo temporale

Trasformazione dei dati con Polars

Liam Brannigan

Data Scientist & Polars Contributor

Trovare prezzi specifici

Tabella di serie temporali

Trasformazione dei dati con Polars

Trovare prezzi specifici

Tabella di serie temporali con 1 riga evidenziata

Trasformazione dei dati con Polars

Trovare prezzi specifici

Tabella di serie temporali con 3 righe evidenziate

Trasformazione dei dati con Polars

Filtrare con pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Obiettivo: trova i prezzi a mezzogiorno del 5 luglio
Trasformazione dei dati con Polars

Filtrare con pl.datetime

prices.filter(
    pl.col("time") == 
)
Trasformazione dei dati con Polars

Filtrare con pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Trasformazione dei dati con Polars

Filtrare con 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 |
Trasformazione dei dati con Polars

Filtrare per data con pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Trasformazione dei dati con Polars

Filtrare per data con pl.date

prices.filter(
    pl.col("time").dt.date() == pl.date(year=2025, month=7, day=5)
)
Trasformazione dei dati con Polars

Filtrare per data con 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   |
Trasformazione dei dati con Polars

Filtrare un intervallo datetime

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


    )
)
Trasformazione dei dati con Polars

Filtrare un intervallo datetime

prices.filter(
    pl.col("time").is_between(
        pl.datetime(2025, 7, 5, 8),
        pl.datetime(2025, 7, 5, 18)
    )
)
Trasformazione dei dati con Polars

Filtrare un intervallo datetime

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 |
Trasformazione dei dati con Polars

Aggregare per periodo

Righe da aggregare in finestre temporali

  • Aggrega i dati con .group_by_dynamic()
Trasformazione dei dati con Polars

Aggregare per periodo

prices.sort("time")


Trasformazione dei dati con Polars

Aggregare per periodo

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


Trasformazione dei dati con Polars

Aggregare per periodo

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


Trasformazione dei dati con Polars

Aggregare per finestre di 6 ore

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

)
Trasformazione dei dati con Polars

Aggregare per finestre di 6 ore

prices.sort("time").group_by_dynamic("time", every="6h").agg(
    pl.col("price").mean().alias("avg_price")
)
Trasformazione dei dati con Polars

Aggregare per finestre di 6 ore

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      |
Trasformazione dei dati con Polars

Aggregare per giorno

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

pl.col("price").mean().alias("avg_price"), pl.col("solar").mean().alias("avg_solar")
)
Trasformazione dei dati con Polars

Aggregare per giorno

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     |
Trasformazione dei dati con Polars

Controllare la dimensione della finestra

  • every - ogni quanto inizia una nuova finestra
  • period - durata di ogni finestra
  • Per impostazione predefinita, period = every
Trasformazione dei dati con Polars

Controllare la dimensione della finestra

prices.group_by_dynamic("time", every="2h")
Trasformazione dei dati con Polars

Controllare la dimensione della finestra

Finestre di 2 ore non sovrapposte

Trasformazione dei dati con Polars

Controllare la dimensione della finestra

prices.group_by_dynamic("time", every="1h", period="2h")
Trasformazione dei dati con Polars

Controllare la dimensione della finestra

Prima finestra sovrapposta che inizia alle 10

Trasformazione dei dati con Polars

Controllare la dimensione della finestra

Seconda finestra sovrapposta che inizia alle 11

Trasformazione dei dati con Polars

Ayo berlatih!

Trasformazione dei dati con Polars

Preparing Video For Download...