Расчет ежемесячного дохода с учетом даты начала и окончания для каждого идентификатора с использованием PolarsPython

Программы на Python
Anonymous
 Расчет ежемесячного дохода с учетом даты начала и окончания для каждого идентификатора с использованием Polars

Сообщение Anonymous »

У меня есть фрейм данных, использующий этот формат

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

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    │
└─────┴────────────┴────────────┴──────────┘
""")
Теперь я хочу разделить каждую строку на столько строк, сколько месяцев между DATE_PREV и DATE, и вычислить ежемесячный доход.
Поэтому в основном мой ожидаемый результат будет



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

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