0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PolarsAdvent Calendar 2024

Day 24

Polarsで、バスの時刻から時刻表を作成

Last updated at Posted at 2024-12-25

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()で時刻を作成できます。

参考

以上

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?