Python – скользящая индексация в библиотеке Polars?Python

Программы на Python
Anonymous
Python – скользящая индексация в библиотеке Polars?

Сообщение Anonymous »

Я хотел бы спросить, знает ли кто-нибудь, как выполнять скользящую индексацию в полярах?
Я лично пробовал несколько решений, которые мне не помогли (покажу их ниже): >
Что я хотел бы сделать: Индексировать количество вхождений за последние 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», и попытался суммировать их, но выводит:



Имя
Дата
Маска
Счетчик




Джон
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"]) )
Приведенный выше код работает правильно, но его можно использовать только для индексации в течение одного и того же дня (т. е. period="1d").
Дополнительные примечания: Я также сделал это в 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

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