我有一个极坐标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我好像在这上面找不到别的东西了,所以我有点卡住了。
在极地中增加年份的推荐方法是什么?
发布于 2022-07-13 00:22:19
您可以使用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))
dfshape: (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_by与3y结合使用。请注意,它位于极性中日期时间表达式的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 │
└──────────────┴─────────────────────────┴──────────────────────────┘https://stackoverflow.com/questions/72959525
复制相似问题