Скользящая сумма с интервалом справа в DuckDBPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Скользящая сумма с интервалом справа в DuckDB

Сообщение Anonymous »

В Polars/Pandas я могу сделать скользящую сумму, где каждая строка соответствует окну (строка – 10 минут, строка]. Например:

Код: Выделить всё

import polars as pl

data = {
"timestamp": [
"2023-08-04 10:00:00",
"2023-08-04 10:05:00",
"2023-08-04 10:10:00",
"2023-08-04 10:10:00",
"2023-08-04 10:20:00",
"2023-08-04 10:20:00",
],
"value": [1, 2, 3, 4, 5, 6],
}

df = pl.DataFrame(data).with_columns(pl.col("timestamp").str.strptime(pl.Datetime))

print(
df.with_columns(pl.col("value").rolling_sum_by("timestamp", "10m", closed="right"))
)
Это выводит

Код: Выделить всё

shape: (6, 2)
┌─────────────────────┬───────┐
│ timestamp           ┆ value │
│ ---                 ┆ ---   │
│ datetime[μs]        ┆ i64   │
╞═════════════════════╪═══════╡
│ 2023-08-04 10:00:00 ┆ 1     │
│ 2023-08-04 10:05:00 ┆ 3     │
│ 2023-08-04 10:10:00 ┆ 9     │
│ 2023-08-04 10:10:00 ┆ 9     │
│ 2023-08-04 10:20:00 ┆ 11    │
│ 2023-08-04 10:20:00 ┆ 11    │
└─────────────────────┴───────┘
Как это сделать в DuckDB? Самое близкое, что я смог придумать, это:

Код: Выделить всё

rel = duckdb.sql("""
SELECT
timestamp,
value,
SUM(value) OVER roll AS rolling_sum
FROM df
WINDOW roll AS (
ORDER BY timestamp
RANGE BETWEEN INTERVAL 10 minutes PRECEDING AND CURRENT ROW
)
ORDER BY timestamp;
""")
print(rel)
но это делает окно [строка – 10 минут, строка], а не (строка – 10 минут, строка]
В качестве альтернативы я мог бы сделать

Код: Выделить всё

rel = duckdb.sql("""
SELECT
timestamp,
value,
SUM(value) OVER roll AS rolling_sum
FROM df
WINDOW roll AS (
ORDER BY timestamp
RANGE BETWEEN INTERVAL '10 minutes' - INTERVAL '1 microsecond' PRECEDING AND CURRENT ROW
)
ORDER BY timestamp;
""")
но я не уверен, насколько это будет надежно?


Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-duckdb
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Скользящая сумма с интервалом справа в DuckDB
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Скользящая сумма с интервалом справа в DuckDB
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Скользящая сумма с использованием реляционного API Python DuckDB
    Anonymous » » в форуме Python
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Скользящая сумма с использованием реляционного API Python DuckDB
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Скользящая сумма, которая сбрасывается по флагу
    Anonymous » » в форуме MySql
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»