import duckdb
import polars as pl
df = pl.DataFrame(data)
duckdb.sql("""
select *, case when count(sales) over w then sum(sales) over w else null end as rolling_sales
from df
window w as (partition by id order by d rows between 1 preceding and current row)
""")
rel = duckdb.table("df")
rel.sum(
"sales",
projected_columns="*",
window_spec="over (partition by id order by d rows between 1 preceding and current row) as rolling_sales",
)
что, на мой взгляд, гораздо более читабельно, чем огромная строка SQL
Но как мне получить случай, когда then разделяется там? Я просмотрел https://duckdb.org/docs/api/python/relational_api.html, и там нет упоминания о «случайе»
Скажем, у меня есть [code]data = {'id': [1, 1, 1, 2, 2, 2], 'd': [1, 2, 3, 1, 2, 3], 'sales': [1, 4, 2, 3, 1, 2]} [/code] Моя конечная цель на данный момент — научиться переводить [code]import duckdb import polars as pl df = pl.DataFrame(data) duckdb.sql(""" select *, case when count(sales) over w then sum(sales) over w else null end as rolling_sales from df window w as (partition by id order by d rows between 1 preceding and current row) """) [/code] Мне удалось: [code]rel = duckdb.table("df") rel.sum( "sales", projected_columns="*", window_spec="over (partition by id order by d rows between 1 preceding and current row) as rolling_sales", ) [/code] что, на мой взгляд, гораздо более читабельно, чем огромная строка SQL Но как мне получить случай, когда then разделяется там? Я просмотрел https://duckdb.org/docs/api/python/relational_api.html, и там нет упоминания о «случайе»