Wie filtere ich sequentielle Ereignisdaten danach, ob auf den Datensatz innerhalb von X Minuten ein bestimmtes Ereignis Python

Python-Programme
Anonymous
 Wie filtere ich sequentielle Ereignisdaten danach, ob auf den Datensatz innerhalb von X Minuten ein bestimmtes Ereignis

Post by Anonymous »

Ich habe einige Daten mit einer Zeitstempelspalte t, einer Ereigniskategoriespalte cat und einer user_id-Spalte. cat kann n-Werte annehmen, einschließlich des Werts A.
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
Wie kann man das in Polars machen? (außer dem Wechsel zur .sql-Methode).
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')
)
und Variationen davon, aber es wurde die Fehlermeldung „Fensterausdruck in Aggregation nicht zulässig“ angezeigt.
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).

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post