Wie pandas groupby Dataframe per Schlüssel zugreifen
Wie kann ich den Zugriff auf die entsprechenden groupby-dataframe in eine groupby-Objekt mit dem Schlüssel? Mit den folgenden groupby:
rand = np.random.RandomState(1)
df = pd.DataFrame({'A': ['foo', 'bar'] * 3,
'B': rand.randn(6),
'C': rand.randint(0, 20, 6)})
gb = df.groupby(['A'])
Ich kann Durchlaufen, um die Schlüssel und Gruppen:
In [11]: for k, gp in gb:
print 'key=' + str(k)
print gp
key=bar
A B C
1 bar -0.611756 18
3 bar -1.072969 10
5 bar -2.301539 18
key=foo
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
Ich würde gerne in der Lage sein, etwas zu tun, wie
In [12]: gb['foo']
Out[12]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
Aber wenn ich das tun (naja, eigentlich habe ich zu tun gb[('foo',)]
), bekomme ich diese seltsamen pandas.core.groupby.DataFrameGroupBy
Sache, die offenbar nicht alle Methoden entsprechen den DataFrame ich will.
Die besten, die ich denken kann, ist
In [13]: def gb_df_key(gb, key, orig_df):
ix = gb.indices[key]
return orig_df.ix[ix]
gb_df_key(gb, 'foo', df)
Out[13]:
A B C
0 foo 1.624345 5
2 foo -0.528172 11
4 foo 0.865408 14
aber das ist irgendwie fies, wenn man bedenkt, wie schön pandas in der Regel ist auf diese Dinge.
Was ist die integrierte Möglichkeit, dies zu tun?
InformationsquelleAutor der Frage beardc | 2013-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
get_group
Methode:Hinweis: Dies erfordert nicht die Erstellung Vermittler Wörterbuch /Kopie jeder subdataframe für jede Gruppe, so werden viel mehr Speicher-effizientes, dass die Schaffung der naive Wörterbuch mit
dict(iter(gb))
. Dies ist, weil es verwendet die Daten-Strukturen, die bereits in der groupby-Objekt.Können Sie verschiedene Spalten mit der groupby-slicing:
InformationsquelleAutor der Antwort Andy Hayden
Wes McKinney (pandas-Autor) in Python for Data Analysis bietet die folgenden Rezept:
gibt ein Wörterbuch, dessen Schlüssel die group-labels und deren Werte sind DataFrames, d.h.
wird der Ertrag das, was du suchst:
InformationsquelleAutor der Antwort JD Margulici
Eher als
Ich lieber mit
gb.groups
Weil auf diese Weise können Sie mehrere Spalten als gut. zum Beispiel:
InformationsquelleAutor der Antwort LegitMe
War ich auf der Suche nach einem Weg zur Probe ein paar Mitglieder der GroupBy-obj - mußte die Frage gepostet, um dies getan.
erstellen groupby-Objekt
pick N dataframes und schnappen Sie sich Ihre Indizes
greifen die Gruppen
Optional - drehen Sie es alle wieder in einer einzigen dataframe-Objekt
InformationsquelleAutor der Antwort meyerson
Wenn Sie sind auf der Suche nach selektiven groupby Objekte dann nicht: gb_groups.Tasten () und Eingabe der gewünschten Taste in der folgenden key_list..
InformationsquelleAutor der Antwort Surya