Код: Выделить всё
import polars as pl
df = pl.from_repr("""
┌─────┬────────────┬────────────┬──────────┐
│ ID ┆ DATE_PREV ┆ DATE ┆ REV_DIFF │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ date ┆ date ┆ i64 │
╞═════╪════════════╪════════════╪══════════╡
│ 1 ┆ 2025-07-31 ┆ 2025-08-10 ┆ 5000 │
│ 2 ┆ 2025-06-01 ┆ 2025-06-01 ┆ 2500 │
│ 3 ┆ 2025-01-15 ┆ 2025-02-28 ┆ 60000 │
└─────┴────────────┴────────────┴──────────┘
""")
Поэтому в основном мой ожидаемый результат будет
ID
МЕСЯЦ
ДОХОД
1
2025-07-01
454,54
1
2025-08-01
4545,45
2
2025-06-01
2500
3
2025-01-01
22666,66
3
2025-02-01
37333,33
Диапазон дат идентификатора 1 составляет в общей сложности 11 дней, из которых 1 день приходится на июль, поэтому 1/11 дохода поступает на июль, а 10/11 — на август.
Диапазон дат идентификатора 2 — 1 день, поэтому 100 % соответствует июню.
Диапазон дат идентификатора 3 – 45 дней, поэтому 17 дней переходят на январь и 28 дней на июнь. Февраль.
Диапазоны дат могут охватывать несколько месяцев и начинаться или заканчиваться в любой день месяца.
Я не могу придумать, как это сделать. Особенно способ, который будет в некоторой степени производительным при увеличении количества строк.
Подробнее здесь: https://stackoverflow.com/questions/797 ... ing-polars