Я лично пробовал несколько решений, которые мне не помогли (покажу их ниже): >
Что я хотел бы сделать: Индексировать количество вхождений за последние X дней по имени
Пример: скажем, Я хочу проиндексировать события за последние 2 дня:
Имя
Дата
Счетчик
Джон
1 23 января1
Джон
1 23 января
2
Джон
1 января 23
3
Джон
1 23 января
4
Джон
2 23 января
5
Джон
2 23 января
6
Джон< /td>
2 23 января
7
Джон
2 23 января
8
Джон
3 23 января
5
Джон
3 23 января
6
Новый парень
1 23 января
1
В этом случае счетчик сбрасывается на «1», начиная с прошлого X дни (напр. для 3 23 января оно начинается с "1" со 2 23 января), или если обнаружено новое имя
Что я пробовал :
Код: Выделить всё
df.groupby_rolling(index_column='Date', period='2d', by='Name', check_sorted=False).agg((pl.col("Date").rank(method='ordinal')).alias("Counter"))
Имя
Дата
Счетчик
Джон
1 23 января
1,2,3,4
Джон
1 23 января
1,2,3,4
Джон
1 23 января
1,2,3,4
Джон
1 23 января
1,2,3,4
Джон
2 23 января
1 ...8
Джон
2 23 января1...8
Джон
2 23 января
1...8
Джон2 23 января
1...8
Джон
3 23 января
1...6
Джон
3 23 января
1...6
Новый парень
1 23 января
1
Код: Выделить всё
df.with_columns( Counter=pl.col("mask").rolling_sum(window_size='2d', by="Date") )
Имя
Дата
Маска
Счетчик
Джон
1 23 января
1
4
Джон
1 января 23< /td>
1
4
Джон
1 23 января
1
4
Джон
1 23 января
1
< td>4
Джон
2 23 января
1
8
Джон2 23 января
1
8
< tr>
Джон
2 23 января
1
8
Джон
2 23 января
1
8
Джон
3 23 января
1
6
Джон
3 23 января
1
6
И он также не может правильно обработать «Нового парня», потому что Rolling_sum не может сделать by="Name ", "Дата"
Код: Выделить всё
df.with_columns(Counter = pl.col("Date").rank(method='ordinal').over(["Name", "Date"]) )
Дополнительные примечания: Я также сделал это в Excel, а также использовал метод грубого/необработанного цикла «for». Оба работали отлично, однако у них были проблемы с огромными объемами данных.
Что я прочитал:
Некоторые ссылки, которые помогут в ответах: (Большинство не Не работает, потому что у них фиксированное скользящее окно вместо динамического окна по «Дате»)
Как реализовать скользящий рейтинг в версии Polars 0.19
https ://github.com/pola-rs/polars/issues/4808
Как выполнить группировку group_by_rolling по дням и часам в полярах в Python?
Как группировать и перемещаться по полярам?
https://docs.pola.rs/py-polars/html/ref ... .rank.html
https://docs.pola.rs/py-polars/html/ref ... lling.html
Подробнее здесь: https://stackoverflow.com/questions/784 ... rs-library