显示了一个K=2
的玩具示例,但该问题主要与高g
基数和K>>1
相关:
df = pl.DataFrame(dict(
g=[1, 2, 1, 2, 1, 2],
v=[1, 2, 3, 4, 5, 6],
))
K = 2
df.with_columns((col.v.shift(k+1).over('g').alias(f's{k}') for k in range(K)))
╭─────┬─────┬──────┬──────╮
│ g ┆ v ┆ s0 ┆ s1 │
│ i64 ┆ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪══════╪══════╡
│ 1 ┆ 1 ┆ null ┆ null │
│ 2 ┆ 2 ┆ null ┆ null │
│ 1 ┆ 3 ┆ 1 ┆ null │
│ 2 ┆ 4 ┆ 2 ┆ null │
│ 1 ┆ 5 ┆ 3 ┆ 1 │
│ 2 ┆ 6 ┆ 4 ┆ 2 │
╰─────┴─────┴──────┴──────╯
我如何才能确保按g
分组只进行一次?
在查询计划中,Polars似乎没有针对此进行优化.
我预计它的运行速度是:
df.group_by('g').agg((col.v.shift(k+1).alias(f's{k}') for k in range(K)))