如何在Python Polars中计算今日与DataFrame日期字段的月份差?
计算Polars DataFrame日期与当前日期的月份差
有两种常用方法,可根据你的需求选择:
方法1:用Polars内置的dt.month_diff()(推荐)
这个方法会计算两个日期之间的完整月份数(会考虑日部分,只有当前日期的日≥目标日期的日时,才算满一个月),代码示例:
import polars as pl # 构造示例数据 df = pl.DataFrame({ "mydate": ["2022-01-15", "2023-05-20", "2021-09-01"] }).with_columns(pl.col("mydate").str.to_date()) # 计算月份差,用Polars的当前时间函数更兼容 df = df.with_columns( pl.col("mydate").dt.month_diff(pl.datetime.now()).alias("month_diff") ) print(df)
如果你的mydate是带时区的日期类型,记得确保pl.datetime.now()也使用对应时区(比如pl.datetime.now("UTC")),避免时区不匹配报错。
方法2:手动计算年月差(忽略日部分)
如果不需要考虑日的影响,只想按年和月的差值直接计算(比如2023-05-31到2024-03-01,直接算10个月),可以手动计算:
df = df.with_columns( ( (pl.datetime.now().year - pl.col("mydate").dt.year) * 12 + (pl.datetime.now().month - pl.col("mydate").dt.month) ).alias("month_diff_ignore_day") )
两种方法的区别
dt.month_diff():计算完整经过的月份,比如2023-05-20到2024-03-10,因为10号<20号,所以只算9个完整月份。- 手动计算:只看年月的差值,不管日,上面的例子会得到10个月。
内容的提问来源于stack exchange,提问作者lmocsi
相关产品推荐
相关产品推荐

