2016-07-17 5 views
0

Warum der Unterschied in der Leistung auf diese drei Methoden, um Gruppen aus einem 32m Zeile Datenrahmen in Pandas zu bekommen.Warum der Unterschied in der Geschwindigkeit, um Gruppen in Pandas zu bekommen

df = df.groupby(["a", "b", "c"]).groups 

df = df.groupby(["a", "b", "c"]).count() 
df = df.index 

df = df.groupby(["a", "b", "c"]).count() 
df = df.drop(df.columns, axis=1).reset_index() 

Die letzte Methode dauert < 10 Sekunden. Ich gab es auf, auf die anderen beiden zu warten.

EDIT: hinzugefügt die eckigen Klammern, die verpasst wurden.

+0

Keine dieser Methoden funktioniert (das ist jetzt, wie Sie groupby verwenden). Sie ordnen einem Datenrahmen immer einige Ergebnisse zu und es ist unklar, was Sie zu tun versuchen. Bitte korrigieren Sie Ihren Code und erklären Sie, was Sie zu tun versuchen. – ayhan

+0

Sorry verpasste die eckigen Klammern beim Eintippen hier. a, b, c sind Spalten – simon

Antwort

0

Eine mögliche Lösung ist hinzuzufügen sort=False-groupby (auch [] hinzufügen):

df = df.groupby(["a", "b", "c"], sort=False).groups 

Docs:

Art: boolean, default Wahr

Sortieren Gruppenschlüssel. Erzielen Sie eine bessere Leistung, indem Sie diese deaktivieren. Beachten Sie, dass dies die Reihenfolge der Beobachtungen innerhalb jeder Gruppe nicht beeinflusst. groupby bewahrt die Reihenfolge von Zeilen in jeder Gruppe

andere Lösung verwendet dask ist:

Geschickter parallelisierbaren Operationen (schnell):

groupby-Aggregat (mit gemeinsamen Aggregationen):

df.groupby (d.f.x) .y.max()
df.groupby ('x'). Max()

+0

Habe das gerade versucht. Es dauert auch eine lange Zeit .... Minuten. – simon

+0

Wenn der Dataframe sehr groß ist, denke ich besser ist 'dask', siehe Bearbeiten. – jezrael