Как я могу суммировать совокупные значения по условию в полярах или пандах?Python

Программы на Python
Ответить
Anonymous
 Как я могу суммировать совокупные значения по условию в полярах или пандах?

Сообщение Anonymous »

У меня есть проблема, которую я пытаюсь решить, предпочтительно используя поляры, но панды тоже подойдут.
Скажем, у нас есть следующий набор данных (пример):

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

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      │
└─────────────────────┴───────────┴───────────────────┴─────────┘
Я пытался использовать функцию cum_sum() в полярах с помощью оператора pl.when, но это неверная логика, поскольку она суммирует с самого начала, т. е. с первого дня (всего около 700 дней).
Примечание: решение должно быть динамическим, т. е. иногда между report_day и non-reporting_day — 1 день, 2 дня и т. д.
Любые идеи и предложения приветствуются!
Заранее спасибо!
‎‎‎‎‎‎‎‎‎‎‎‎

Подробнее здесь: https://stackoverflow.com/questions/759 ... -or-pandas
Ответить

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

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

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

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

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