高偏振星:如何添加年文字吗?



我有一个Polars LazyFrame,在应用了几个函数之后,看起来像这样:

┌───────────────┬──────────────┬─────────────────────────┬──────────────────────────┐
│ citing_patent ┆ cited_patent ┆ cited_patent_issue_date ┆ citing_patent_issue_date │
│ ---           ┆ ---          ┆ ---                     ┆ ---                      │
│ str           ┆ str          ┆ date                    ┆ date                     │
╞═══════════════╪══════════════╪═════════════════════════╪══════════════════════════╡
│ X             ┆ A            ┆ 2000-10-20              ┆ 2001-02-08               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ X             ┆ B            ┆ 1999-08-04              ┆ 2001-02-08               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Y             ┆ B            ┆ 1999-08-04              ┆ 2004-06-04               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ N             ┆ A            ┆ 2000-10-20              ┆ 2021-12-20               │
└───────────────┴──────────────┴─────────────────────────┴──────────────────────────┘

我想将其按cited_patent分组,并在cited_patent_issue_date的三年内有一列citing_patent的数量。

在阅读了15741618之后,我尝试使用dateutil.relativedelta

这是我到目前为止的代码:

.groupby("cited_patent")
.agg(
[
pl.col("cited_patent_issue_date").first(),
(pl.col("citing_patent_issue_date") <= pl.col("cited_patent_issue_date").first() + relativedelta(years=3)).sum()
]
)

但是,这不起作用,因为我得到一个错误:

pyo3_runtime.PanicException: could not convert value relativedelta(years=+3) as a Literal

我似乎找不到关于这个的任何其他内容,所以我有点卡住了。

在极地日期中添加年份的推荐方法是什么?

可以使用offset_by函数。从这些数据开始:

import polars as pl
df = pl.DataFrame(
{
"citing_patent": ["X", "X", "Y", "N"],
"cited_patent": ["A", "B", "B", "A"],
"cited_patent_issue_date": [
"2000-10-20",
"1999-08-04",
"1999-08-04",
"2000-10-20",
],
"citing_patent_issue_date": [
"2001-02-08",
"2001-02-08",
"2004-06-04",
"2021-12-20",
],
}
).with_columns(pl.col("^.*_date$").str.strptime(pl.Date))
df
shape: (4, 4)
┌───────────────┬──────────────┬─────────────────────────┬──────────────────────────┐
│ citing_patent ┆ cited_patent ┆ cited_patent_issue_date ┆ citing_patent_issue_date │
│ ---           ┆ ---          ┆ ---                     ┆ ---                      │
│ str           ┆ str          ┆ date                    ┆ date                     │
╞═══════════════╪══════════════╪═════════════════════════╪══════════════════════════╡
│ X             ┆ A            ┆ 2000-10-20              ┆ 2001-02-08               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ X             ┆ B            ┆ 1999-08-04              ┆ 2001-02-08               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ Y             ┆ B            ┆ 1999-08-04              ┆ 2004-06-04               │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ N             ┆ A            ┆ 2000-10-20              ┆ 2021-12-20               │
└───────────────┴──────────────┴─────────────────────────┴──────────────────────────┘

我们可以使用offset_by3y。请注意,它位于polar中datetime表达式的dt命名空间下。

(
df.groupby("cited_patent").agg(
[
pl.col("cited_patent_issue_date").first(),
(
pl.col("citing_patent_issue_date")
<= pl.col("cited_patent_issue_date").first().dt.offset_by('3y')
).sum(),
]
)
)
shape: (2, 3)
┌──────────────┬─────────────────────────┬──────────────────────────┐
│ cited_patent ┆ cited_patent_issue_date ┆ citing_patent_issue_date │
│ ---          ┆ ---                     ┆ ---                      │
│ str          ┆ date                    ┆ u32                      │
╞══════════════╪═════════════════════════╪══════════════════════════╡
│ B            ┆ 1999-08-04              ┆ 1                        │
├╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┼╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌┤
│ A            ┆ 2000-10-20              ┆ 1                        │
└──────────────┴─────────────────────────┴──────────────────────────┘

相关内容

  • 没有找到相关文章

最新更新