Polarsのlistを使ったサンプルです。
下記のようなバスの到着時刻の表があります。
import polars as pl
times = ["07:20", "07:45", "08:10", "08:30", "08:50", "09:10", "09:30", "09:50"]
df_time = pl.Series("time", times).str.to_time("%H:%M").to_frame()
df_time
shape: (8, 1)
time |
---|
time |
07:20:00 |
07:45:00 |
08:10:00 |
08:30:00 |
08:50:00 |
09:10:00 |
09:30:00 |
09:50:00 |
この表からバスの時刻表を作成してみましょう。
バスの時刻表は、時間ごとに、分をリストで表現します。
Polarsでは次のようにできます。
df_dia = df_time.group_by(
hour=pl.col("time").dt.hour(), maintain_order=True
).agg(minute=pl.col("time").dt.minute())
df_dia
shape: (3, 2)
hour | minute |
---|---|
i8 | list[i8] |
7 | [20, 45] |
8 | [10, 30, 50] |
9 | [10, 30, 50] |
ポイント
Polarsではエクスプレッションでグルーピングできます。ここでは、列timeのdt.hour()
を使ってグルーピングしています。
agg()
でdt.minute()
を指定すると、分のリストになります。
元の時刻に戻すには次のようにします。
df_dia.explode("minute").select(time=pl.time("hour", "minute"))
shape: (8, 1)
time |
---|
time |
07:20:00 |
07:45:00 |
08:10:00 |
08:30:00 |
08:50:00 |
09:10:00 |
09:30:00 |
09:50:00 |
ポイント
explode()
でlistを行に分解します。
分解したhourとminuteからpl.time()
で時刻を作成できます。
参考
以上