Filtrování a agregace podle časového období

Data Transformation with Polars

Liam Brannigan

Data Scientist & Polars Contributor

Hledání konkrétních cen

Tabulka časových řad

Data Transformation with Polars

Hledání konkrétních cen

Tabulka časových řad se zvýrazněným řádkem

Data Transformation with Polars

Hledání konkrétních cen

Tabulka časových řad se třemi zvýrazněnými řádky

Data Transformation with Polars

Filtrování pomocí pl.datetime

prices.filter(

)

$$

$$

$$

$$

  • Úkol: najdi ceny v poledne 5. července
Data Transformation with Polars

Filtrování pomocí pl.datetime

prices.filter(
    pl.col("time") == 
)
Data Transformation with Polars

Filtrování pomocí pl.datetime

prices.filter(
    pl.col("time") == pl.datetime(                                  )
)
Data Transformation with Polars

Filtrování pomocí 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 Transformation with Polars

Filtrování podle data pomocí pl.date

prices.filter(
    pl.col("time").dt.date() == 
)
Data Transformation with Polars

Filtrování podle data pomocí pl.date

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

Filtrování podle data pomocí 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 Transformation with Polars

Filtrování časového rozsahu

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


    )
)
Data Transformation with Polars

Filtrování časového rozsahu

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

Filtrování časového rozsahu

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 Transformation with Polars

Agregace podle časového období

Řádky k agregaci do časových oken

  • Agreguj data pomocí .group_by_dynamic()
Data Transformation with Polars

Agregace podle časového období

prices.sort("time")


Data Transformation with Polars

Agregace podle časového období

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


Data Transformation with Polars

Agregace podle časového období

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


Data Transformation with Polars

Agregace do 6hodinových oken

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

)
Data Transformation with Polars

Agregace do 6hodinových oken

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

Agregace do 6hodinových oken

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 Transformation with Polars

Agregace po dnech

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 Transformation with Polars

Agregace po dnech

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 Transformation with Polars

Nastavení velikosti okna

  • every – jak často začíná nové okno
  • period – délka každého okna
  • Ve výchozím nastavení se period rovná every
Data Transformation with Polars

Nastavení velikosti okna

prices.group_by_dynamic("time", every="2h")
Data Transformation with Polars

Nastavení velikosti okna

Nepřekrývající se 2hodinová okna

Data Transformation with Polars

Nastavení velikosti okna

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

Nastavení velikosti okna

První překrývající se okno začínající v 10

Data Transformation with Polars

Nastavení velikosti okna

Druhé překrývající se okno začínající v 11

Data Transformation with Polars

Pojďme cvičit!

Data Transformation with Polars

Preparing Video For Download...