🌟

【polars】日付の差を求める方法

2024/04/17に公開

はじめに

polarsを利用する中で、dateカラム同士の差を求める方法が分からなかったので調べた内容をまとめます。kaggleなどのテーブルデータコンペでは見かける機会も多くなってきたライブラリの為、備忘録も兼ねて投稿しました。

問題

date型のカラム同士の日数差を求めたい。

解決方法

dt.total_days()を利用する事で求めることができました。

実装例

from datetime import datetime
df = pl.DataFrame(
    {
        "date1": pl.datetime_range(
            datetime(2020, 3, 1), datetime(2020, 5, 1), "1mo", eager=True
        ),
        "date2": pl.datetime_range(
            datetime(2019, 3, 1), datetime(2019, 5, 1), "1mo", eager=True
        ),
    }
)
df.select(
    [
        pl.col("date1"),
        pl.col("date2"),
        (pl.col("date1") - pl.col("date2")).dt.total_days().alias("days_diff"),
    ]
)


shape: (3, 3)
date1 | date2 | days_diff
datetime[μs] | datetime[μs] | i64
2020-03-01 00:00:00 | 2019-03-01 00:00:00 | 366
2020-04-01 00:00:00 | 2019-04-01 00:00:00 | 366
2020-05-01 00:00:00 | 2019-05-01 00:00:00 | 366

おわりに

はじめに公式ドキュメントのtemporalにある項目をざっと確認しましたが、date関連のメソッドが多く見つけるのに苦労しました。(途中CHAT_GPTにdate_diffでできるよと言われて、迷走したりしてました。)
polarsについてはもっと習熟していきたいので、細々と記事を投稿していきたいと思っています。

参考

https://docs.pola.rs/py-polars/html/reference/expressions/api/polars.Expr.dt.total_days.html#polars.Expr.dt.total_days

https://dev.classmethod.jp/articles/polars-tutorial-003-datetime-udf/#toc-13

Discussion