Скажем, у нас есть следующий набор данных (пример):
Код: Выделить всё
import polars as pl
df = pl.from_repr("""
┌─────────────────────┬───────────┬───────────────────┐
│ date ┆ customers ┆ is_reporting_day? │
│ --- ┆ --- ┆ --- │
│ datetime[ns] ┆ i64 ┆ bool │
╞═════════════════════╪═══════════╪═══════════════════╡
│ 2022-01-01 00:00:00 ┆ 3 ┆ true │
│ 2022-01-02 00:00:00 ┆ 4 ┆ false │
│ 2022-01-03 00:00:00 ┆ 5 ┆ false │
│ 2022-01-04 00:00:00 ┆ 3 ┆ false │
│ 2022-01-05 00:00:00 ┆ 2 ┆ true │
└─────────────────────┴───────────┴───────────────────┘
""")
# df = df.to_pandas() # for a pandas solution
- если report_day имеет значение True, сохраните количество клиентов как есть.
- если report_day имеет значение False: суммируйте всех клиентов (4, 5, 3 = 12 + 2 = 14) и добавьте его к следующему значению True в report_day
Код: Выделить всё
┌─────────────────────┬───────────┬───────────────────┬─────────┐
│ date ┆ customers ┆ is_reporting_day? ┆ cum_sum │
│ --- ┆ --- ┆ --- ┆ --- │
│ datetime[ns] ┆ i64 ┆ str ┆ i64 │
╞═════════════════════╪═══════════╪═══════════════════╪═════════╡
│ 2022-01-01 00:00:00 ┆ 3 ┆ True ┆ 3 │
│ 2022-01-05 00:00:00 ┆ 2 ┆ True ┆ 14 │
└─────────────────────┴───────────┴───────────────────┴─────────┘
Примечание: решение должно быть динамическим, т. е. иногда между report_day и non-reporting_day — 1 день, 2 дня и т. д.
Любые идеи и предложения приветствуются!
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/759 ... -or-pandas
Мобильная версия