Ich möchte Datensätze auswählen, auf die (nicht unbedingt sofort) innerhalb von 5 Minuten ein A-Ereignis folgt (für denselben Benutzer).
In SQL würde ich Folgendes tun:
Code: Select all
select
*
from self
qualify count_if(category = 'A') over (partition by user_id order by t
range between current row and interval '5 minutes' following) > 0
Ganz allgemein: Hat jemand gute Hinweise auf das entsprechende mentale Modell bei der Übersetzung von einer über (Partition nach Reihenfolge nach Zeilen / Bereich zwischen und ) SQL-Syntax in Polars?
Ich habe Folgendes versucht:
Code: Select all
df.filter(
pl.col('cat').any().over('user_id').rolling(
index_column='t',
period = '5m',
offset = '0m',
closed = 'both')
)
Ich habe auch versucht, .rolling direkt auf dem DataFrame zu verwenden, aber dies führt zu einer Aggregation, die ich nicht möchte (ich möchte die Struktur der Tabelle beibehalten).
Mobile version