Polars - катится - Как сбросить счетчик каждый день?Python

Программы на Python
Ответить
Anonymous
 Polars - катится - Как сбросить счетчик каждый день?

Сообщение Anonymous »

Я перешел с Pandas-Python на Polars и пытаюсь понять, как по сути рассчитать скользящую сумму за каждый день. Мне не нужна только общая сумма за каждый день, мне нужны общие суммы за каждый период времени (5-минутный период) каждый день в режиме «rolling_sum». Вот код, который у меня есть:
from datetime import datetime, timedelta

df = pl.DataFrame({
"date": pl.datetime_range(
datetime(1985, 1, 1),
datetime(1985, 1, 6),
timedelta(minutes=5),
time_unit="ns",
eager=True
)
})

df = df.with_columns(
A=pl.lit(2, dtype=pl.Int32)
)

df = (
df.lazy()
.rolling("date", period="1d")
.agg(
pl.col("A").sum().alias("A_daily")
)
.collect()
)

print(df[280:])

Это производит:
shape: (1_161, 2)
┌─────────────────────┬─────────┐
│ date ┆ A_daily │
│ --- ┆ --- │
│ datetime[ns] ┆ i32 │
╞═════════════════════╪═════════╡
│ 1985-01-01 23:20:00 ┆ 562 │
│ 1985-01-01 23:25:00 ┆ 564 │
│ 1985-01-01 23:30:00 ┆ 566 │
│ 1985-01-01 23:35:00 ┆ 568 │
│ 1985-01-01 23:40:00 ┆ 570 │
│ 1985-01-01 23:45:00 ┆ 572 │
│ 1985-01-01 23:50:00 ┆ 574 │
│ 1985-01-01 23:55:00 ┆ 576 │
│ 1985-01-02 00:00:00 ┆ 576 │
│ 1985-01-02 00:05:00 ┆ 576 │
│ 1985-01-02 00:10:00 ┆ 576 │
│ 1985-01-02 00:15:00 ┆ 576 │
│ 1985-01-02 00:20:00 ┆ 576 │
│ 1985-01-02 00:25:00 ┆ 576 │
│ 1985-01-02 00:30:00 ┆ 576 │
│ 1985-01-02 00:35:00 ┆ 576 │
│ 1985-01-02 00:40:00 ┆ 576 │
│ 1985-01-02 00:45:00 ┆ 576 │
│ 1985-01-02 00:50:00 ┆ 576 │
...
│ 1985-01-05 23:50:00 ┆ 576 │
│ 1985-01-05 23:55:00 ┆ 576 │
│ 1985-01-06 00:00:00 ┆ 576 │
└─────────────────────┴─────────┘

Я думаю, что на самом деле мне нужно, чтобы каждый день A_Daily сбрасывался, то есть выглядел так:
shape: (1_161, 2)
┌─────────────────────┬─────────┐
│ date ┆ A_daily │
│ --- ┆ --- │
│ datetime[ns] ┆ i32 │
╞═════════════════════╪═════════╡
│ 1985-01-01 23:20:00 ┆ 562 │
│ 1985-01-01 23:25:00 ┆ 564 │
│ 1985-01-01 23:30:00 ┆ 566 │
│ 1985-01-01 23:35:00 ┆ 568 │
│ 1985-01-01 23:40:00 ┆ 570 │
│ 1985-01-01 23:45:00 ┆ 572 │
│ 1985-01-01 23:50:00 ┆ 574 │
│ 1985-01-01 23:55:00 ┆ 576 │
│ 1985-01-02 00:00:00 ┆ 2 │ # !!!! CHANGE HERE !!!!
│ 1985-01-02 00:05:00 ┆ 4 │
│ 1985-01-02 00:10:00 ┆ 6 │
│ 1985-01-02 00:15:00 ┆ 8 │
│ 1985-01-02 00:20:00 ┆ 10 │
│ 1985-01-02 00:25:00 ┆ 12 │
│ 1985-01-02 00:30:00 ┆ 14 │
│ 1985-01-02 00:35:00 ┆ 18 │
│ 1985-01-02 00:40:00 ┆ 20 │
│ 1985-01-02 00:45:00 ┆ 22 │
│ 1985-01-02 00:50:00 ┆ 24 │


По сути, я хочу просто сбрасывать скользящую сумму каждый день. В Pandas я бы сделал это примерно так:
tn = outdata.groupby(pd.Grouper(freq='D', key='_daily_reset'))[
# '_vp_volume'].transform('cumsum')


Подробнее здесь: https://stackoverflow.com/questions/764 ... t-each-day
Ответить

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

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

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

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

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