Probleme beim Berechnen rollender 7-Tage-Unique User nach Gruppe in einem Group-User-Date-Dataset. Es ist eine klassische Metrik, und mir ist klar, dass mir jemand bei Pandas helfen könnte.rolling uniques über Gruppen + Zeit in Pandas
Beispieldaten:
from StringIO import StringIO
import pandas as pd
data = StringIO("""grp1,user,date
a,1,2016-10-10
a,1,2016-10-09
a,1,2016-10-07
a,2,2016-10-09
a,2,2016-10-06
a,3,2016-10-10
a,3,2016-10-09
""")
df = pd.read_csv(data)
Für diesen einfachen Datensatz möchte ich zurück:
a, 2016-10-10, 3 <- 3 users were in group a in the 7 days ending 10/10
a, 2016-10-09, 3 <- 3 users were in group a in the 7 days ending 10/09
a, 2016-10-07, 2 <- 2 users were in group a in the 7 days ending 10/07
a, 2016-10-06, 1 <- 1 users were in group a in the 7 days ending 10/06
ich nichts dagegen, wenn es sich um eine des ursprünglichen Datensatzes oder einer Aggregation Transformation ist.
haben 1) eine Menge Such versucht und 2) eine Menge von Variationen von
from datetime import datetime, timedelta
rolling_uniques = lambda x: x['user'].unique().size if x['date'] + timedelta(days=6) <= x['date'].max() else 0
df.apply(rolling_uniques, axis=1)
ODER
df.groupby(['grp1', 'user', 'date']).transform(rolling_uniques)
aber nichts arbeitet aus. In meinen Daten habe ich mehrere Gruppenspalten und natürlich mehr Kategorien innerhalb von grp1 als nur 'a'.
Haben Sie sich die df.rolling Funktion angesehen? – Boud
ja, spielte mit dem ein Bündel, aber scheint passen Sum/Anzahl/etc Anwendungsfälle, aber nicht in willkürlichen Gruppen Uniques –
bis jetzt der einzige Ansatz, den ich arbeiten kann, ist durch die Gruppen zu durchlaufen, durchlaufen die Daten und berechnen die eindeutigen Benutzer für die Zeilen innerhalb von 7 Tagen –