下面是下面的代码:
import datetime
import polars as pl
df = pl.DataFrame(
{
"id": [1, 2, 1, 2, 1, 2, 3],
"date": [
datetime.date(2022, 1, 1),
datetime.date(2022, 1, 1),
datetime.date(2022, 1, 11),
datetime.date(2022, 1, 11),
datetime.date(2022, 2, 1),
datetime.date(2022, 2, 1),
datetime.date(2022, 2, 1),
],
"value": [1, 2, 3, None, 5, 6, None],
}
)
df.groupby_dynamic("date", by="id", every="1mo", period="1mo", closed="both").agg(
pl.arange(1, pl.count() + 1) - pl.arange(1, pl.count() + 1).filter(pl.col("value").is_not_null()).mean(),
)
但是,当我运行它,我得到了下面的错误,我不太明白.
pyo3_runtime.PanicException: index out of bounds: the len is 1 but the index is 1
我想要实现的行为是:对于每个组,创建一个从1到该组中行数的自然序列,并从中减去该组中"值"列中非空值的平均值。(如果该组中所有"值"都为空,则返回空值)。
更具体地说,我想要的结果是
shape: (5, 3)
┌─────┬────────────┬──────────────────┐
│ id ┆ date ┆ arange │
│ --- ┆ --- ┆ --- │
│ i64 ┆ date ┆ list[f64] │
╞═════╪════════════╪══════════════════╡
│ 1 ┆ 2022-01-01 ┆ [-1.0, 0.0, 1.0] │
│ 1 ┆ 2022-02-01 ┆ [0.0] │
│ 2 ┆ 2022-01-01 ┆ [-1.0, 2.0, 1.0] │
│ 2 ┆ 2022-02-01 ┆ [0.0] │
│ 3 ┆ 2022-02-01 ┆ [null] │
└─────┴────────────┴──────────────────┘
我怎样才能做到这一点?
1条答案
按热度按时间t98cgbkg1#
看起来你可能需要"爆炸",然后实现你的逻辑。
之后,您可以使用
group
列将它们重新组合在一起。