2015-03-04 14 views
7

Ich habe eine Codezeile:Python Pandas GroupBy erhalten Liste der Gruppen

g = x.groupby('Color') 

Die Farben sind Rot, Blau, Grün, Gelb, Lila, Orange, und Schwarz. Wie gebe ich diese Liste zurück? Für ähnliche Attribute verwende ich x.Attribute und es funktioniert gut, aber x.Color verhält sich nicht auf die gleiche Weise.

+0

Sie möchten also eine Liste der eindeutigen Werte in Farbe? –

+1

Sie können die einzigartigen Werte von Ihrem ursprünglichen df bekommen, keine Notwendigkeit, 'x ['Color'] zu gruppieren. Unique()' – EdChum

+1

Das x ['Color']. Unique war genau das, wonach ich suchte. Vielen Dank. – user3745115

Antwort

1

So geht's.

groups = list() 
for g, data in x.groupby('Color'): 
    print(g, data) 
    groups.append(g) 

Der Kerngedanke hier ist: Wenn Sie über einen Datenrahmen groupby Iterator laufen, werden Sie ein zwei-Tupel von (Gruppenname, gefilterten Datenrahmen) zurück, wo gefilterte Datenrahmen nur Datensätze enthält entsprechende zu dieser Gruppe).

+2

Alternativ können Sie, wenn Sie die eindeutigen Werte in jeder Spalte erhalten möchten, 'numpy.unique (x [col_name] .values)' – ericmjl

3

Es ist mein Verständnis, dass Sie einen Datenrahmen haben, der mehrere Spalten enthält. Eine der Spalten ist "Farbe", die verschiedene Arten von Farben hat. Sie möchten eine Liste der vorhandenen eindeutigen Farben zurückgeben.

colorGroups = df.groupby(['Color']) 
for c in colorGroups.groups: 
    print c 

Der obige Code gibt Ihnen alle Farben, die existieren, ohne die Farbnamen zu wiederholen. Daher sollten Sie eine Ausgabe wie erhalten:

Red 
Blue 
Green 
Yellow 
Purple 
Orange 
Black 

Eine Alternative ist die unique() Funktion, die ein Array aller eindeutigen Werte in einer Serie zurückgibt. So kann ein Array aller einzigartigen Farben zu bekommen, würden Sie tun:

df['Color'].unique() 

Der Ausgang ist ein Array, so zum Beispiel print df['Color'].unique()[3] würden Sie Yellow geben.

14

Es ist viel einfache Art und Weise tun:

g = x.groupby('Color') 

g.groups.keys() 

Dadurch groupby() Pandas gibt Ihnen einen dict von gruppierten Verschlechterungsfaktoren. Sie können leicht die Schlüsselliste dieses Diktats durch Python in Funktion keys() eingebaut bekommen.

+0

Dies ist viel "pandorable" als andere Antworten. :) – Peaceful

5

Ich wollte dies als Kommentar zu Yanqi Mas Antwort hinzufügen, aber ich habe nicht den Ruf, noch zu kommentieren.

Wenn Sie nicht über die Reihenfolge der Gruppen kümmern, wird diese Antwort gut funktionieren:

g = x.groupby('Color') 
g.groups.keys() 
list(g.groups) # or this 

Beachten Sie jedoch, dass g.groups ein Wörterbuch ist, so die Tasten sind von Natur aus ungeordneten! Dies ist auch dann der Fall, wenn Sie sort=True für die Methode groupby verwenden, um die Gruppen zu sortieren, was standardmäßig der Fall ist.

Das hat mich wirklich hart gekostet, als es zu einer anderen Reihenfolge auf zwei Plattformen führte, zumal ich das zweite Formular oben verwendete, also war es zunächst nicht offensichtlich, dass g.groups ein dict war.

Meiner Meinung nach ist der beste Weg, dies zu tun, ist, dass die GroupBy object has an iterator, mich die Tatsache zunutze zu nehmen und eine Liste Verständnis verwenden, um die Gruppen in der Reihenfolge, wie sie in dem GroupBy Objekt vorhanden zurückzukehren:

g = x.groupby('Color') 
groups = [name for name,unused_df in g] 

Es ist ein wenig weniger lesbar, aber dies wird immer die Gruppen in der richtigen Reihenfolge zurückgeben.