2017-06-28 3 views
5

Ich habe einen Pandas Datenrahmen von Fahrzeugkoordinaten (von mehreren Fahrzeugen an mehreren Tagen). Für jedes Fahrzeug und jeden Tag mache ich zwei Dinge: Entweder wende ich einen Algorithmus an oder filtere ihn komplett aus dem Datensatz heraus, wenn er bestimmte Kriterien nicht erfüllt.Verarbeitung von Pandas Daten im deklarativen Stil

das ich df.groupby('vehicle_id', 'day') verwenden, um acheive und dann .apply(algorithm) oder .filter(condition) wo algorithm und condition Funktionen sind, die in einem Datenrahmen nehmen.

Ich würde die vollständige Verarbeitung meiner Daten-Set wie in einem declaritive Stil geschrieben (die mehrere .apply und .filter Schritte beinhaltet) werden, im Gegensatz zu imperativ durch die Gruppen Looping, mit dem Ziel, die ganze Sache etwas zu suchen wie:

df.group_by('vehicle_id', 'day').apply(algorithm1).filter(condition1).apply(algorithm2).filter(condition2)

natürlich ist der obige Code falsch, da .apply() und .filter() neuen Datenrahmen zurückkehren, und das ist genau mein Problem. Sie geben alle Daten in einem einzigen Datenrahmen zurück, und ich finde, dass ich kontinuierlich .groupby('vehicle_id', 'day') anwenden muss.

Gibt es eine nette Möglichkeit, dass ich dies schreiben kann, ohne immer wieder mit den gleichen Spalten gruppieren zu müssen?

Antwort

0

Da apply verwendet eine for-Schleife sowieso (dh keine ausgefeilte Optimierungen im Hintergrund gibt es), I for-Schleife eine tatsächliche schlage vor, mit:

arr = [] 
for key, dfg in df.groupby(['vehicle_id', 'day']): 
    dfg = dfg.do_stuff1() # Perform all needed operations 
    dfg = do_stuff2(dfg) # 
    arr.append(dfg) 

result = pd.concat(arr) 

Eine Alternative, eine Funktion zu erstellen, die alle die läuft gilt und Filter der Reihe nach auf einem gegebenen Datenrahmen, und dann eine einzelne groupby Karte/anwenden, um es:

def all_operations(dfg): 
    # Do stuff 
    return result_df 

result = df.group_by(['vehicle_id', 'day']).apply(all_operations) 

in beiden Optionen werden Sie mit Fällen, in denen ein leerer Datenrahmen wird von den Filtern, wenn eine solche zurück zu tun haben Fälle existieren.

Verwandte Themen