You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polars中如何为日期列增加指定年数并实现分组统计

报错原因

Polars 表达式运算无法直接识别Python侧的dateutil.relativedelta对象,所以会抛出字面量类型错误。Polars本身内置了高性能的日期偏移API,不需要依赖第三方日期处理库,完全可以在表达式内部直接完成年数偏移计算。

推荐实现方案

使用Polars原生的dt.offset_by()方法做日期偏移,传入"3y"即可实现日期加3年的逻辑,该方法会自动处理闰年、月末日期对齐等特殊场景,计算逻辑比手动加天数、转Python datetime对象计算更准确,且所有计算都在Polars内核完成,性能远高于Python侧循环处理,完全适配LazyFrame场景。

修正后的代码如下:

import polars as pl

# 省略df初始化步骤,直接写分组统计逻辑
result = df.group_by("cited_patent").agg(
    pl.col("cited_patent_issue_date").first(),
    # 统计3年内引用量:引用日期 <= 被引专利公开日+3年
    (pl.col("citing_patent_issue_date") <= pl.col("cited_patent_issue_date").first().dt.offset_by("3y"))
    .sum()
    .alias("3y_citation_count")
)

针对你提供的样例数据,运行后输出结果为:

shape: (2, 3)
┌──────────────┬─────────────────────────┬──────────────────┐
│ cited_patent ┆ cited_patent_issue_date ┆ 3y_citation_count│
│ str          ┆ date                    ┆ u32              │
╞══════════════╪═════════════════════════╪══════════════════╡
│ A            ┆ 2000-10-20              ┆ 1                │
│ B            ┆ 1999-08-04              ┆ 1                │
└──────────────┴─────────────────────────┴──────────────────┘

补充说明

  • 如果你使用的Polars版本较低(<0.19),没有dt.offset_by()方法,可以替换为dt.add_years(3)实现完全相同的年偏移效果,写法为pl.col("cited_patent_issue_date").first().dt.add_years(3)
  • 如果需要严格限定引用发生在专利公开之后,可以在判断条件中补充pl.col("citing_patent_issue_date") >= pl.col("cited_patent_issue_date").first(),两个判断条件用&连接即可,注意每个条件要单独加括号。

内容的提问来源于stack exchange,提问作者seasonedfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 10:45:33