Реализация счетчика серий в PolarsPython

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

Сообщение Anonymous »

Я пытаюсь придумать самый идиоматический/элегантный способ создания счетчика полос в Polars — либо полос последовательных значений, либо последовательных строк, в которых выполняется заданное условие. Например:




person_id
order_id
item
streak_counter




Алиса
1
A
1


Боб
2
B
1


Алиса
3
B
1


Боб
4
B
2


алиса
5
A
1


боб
6
B
3


Алиса
7
А
2


Боб
8
А
1




В PySpark я бы сделал что-то вроде

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

from pyspark.sql import functions as F, Window

partition_cols = [F.col("person_id")]
order_cols = [F.col("order_id")]
window_spec = Window.partitionBy(partition_cols).orderBy(order_cols)

streak_reset = F.coalesce(F.col("item") != sqlf.lag("item").over(window_spec), True)

cond = sqlf.when(streak_reset, 1).otherwise(0)
streak_id = F.sum(cond).over(window_spec)

streak_spec = Window.partitionBy(partition_cols + [streak_id]).orderBy(order_cols)

streak_counter = F.sum(col).over(streak_spec).alias("streak_counter")
df = df.withColumn(streak_counter)
Я подозреваю, что у Polars есть способ превзойти это по лаконичности/ясности, но я пока такого не придумал.

Подробнее здесь: https://stackoverflow.com/questions/764 ... -in-polars
Ответить

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

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

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

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

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