Получить значение из текущей строки в скользящем окнеPython

Программы на Python
Ответить
Anonymous
 Получить значение из текущей строки в скользящем окне

Сообщение Anonymous »

Учитывая следующую структуру данных

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

import polars as pl

df = pl.DataFrame(
{
"order_id": ["o01", "o02", "o03", "o04", "o10", "o11", "o12", "o13"],
"customer_id": ["ca", "ca", "ca", "ca", "cb", "cb", "cb", "cb"],
"date": [
"2024-04-03",
"2024-04-04",
"2024-04-04",
"2024-04-11",
"2024-04-02",
"2024-04-02",
"2024-04-03",
"2024-05-13",
],
},
schema_overrides={"date": pl.Date},
)
Я хотел бы выполнить некоторые расчеты в скользящем окне. Для этого я хотел бы получить значение из текущей строки (столбца, который не является частью определения окна (т.е. раздела или фрейма)), например. order_id в следующем примере, а также индекс строки для каждого кадра (не раздела).
Пока что есть (столбецorders — это просто иллюстрация) вышеупомянутого «расчета»).

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

(
df.sort("customer_id", "date")
.rolling(
index_column="date",
period="1w",
offset="0d",
closed="left",
group_by="customer_id",
)
.agg(
frame_index=pl.int_range(pl.len()).first(),
current_order_id=pl.col("order_id").first(),
orders=pl.col("order_id"),
)
)

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

customer_id date        frame_index current_order_id    orders
str         date        i64         str                 list[str]
"ca"        2024-04-03  0           "o01"               ["o01", "o02", "o03"]
"ca"        2024-04-04  0           "o02"               ["o02", "o03"]
"ca"        2024-04-04  0           "o02"               ["o02", "o03"]
"ca"        2024-04-11  0           "o04"               ["o04"]
"cb"        2024-04-02  0           "o10"               ["o10", "o11", "o12"]
"cb"        2024-04-02  0           "o10"               ["o10", "o11", "o12"]
"cb"        2024-04-03  0           "o12"               ["o12"]
"cb"        2024-05-13  0           "o13"               ["o13"]
Но мне бы хотелось (обратите внимание на различия вframe_index и current_order_id в 3-й и 6-й строке).

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

customer_id date        frame_index current_order_id    orders
str         date        i64         str                 list[str]
"ca"        2024-04-03  0           "o01"               ["o01", "o02", "o03"]
"ca"        2024-04-04  0           "o02"               ["o02", "o03"]
"ca"        2024-04-04  1           "o03"               ["o02", "o03"]
"ca"        2024-04-11  0           "o04"               ["o04"]
"cb"        2024-04-02  0           "o10"               ["o10", "o11", "o12"]
"cb"        2024-04-02  1           "o11"               ["o10", "o11", "o12"]
"cb"        2024-04-03  0           "o12"               ["o12"]
"cb"        2024-05-13  0           "o13"               ["o13"]
Мне кажется, что мне не хватает выражения current_row() или nth(), но, вероятно, есть другие умные способы добиться того, чего я хочу, с помощью полярники?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-window
Ответить

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

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

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

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

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