Ich möchte das Ergebnis der Gruppierung mit Pandas drucken.
Ich habe einen Datenrahmen:
import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'three', 'three', 'one'], 'B': range(6)})
print(df)
A B
0 one 0
1 one 1
2 two 2
3 three 3
4 three 4
5 one 5
Beim Drucken nach Gruppierung nach 'A' habe ich Folgendes:
print(df.groupby('A'))
<pandas.core.groupby.DataFrameGroupBy object at 0x05416E90>
Wie kann ich den gruppierten Datenrahmen drucken?
Wenn ich mache:
print(df.groupby('A').head())
Ich erhalte den Datenrahmen so, als wäre er nicht gruppiert:
A B
A
one 0 one 0
1 one 1
two 2 two 2
three 3 three 3
4 three 4
one 5 one 5
Ich hatte so etwas erwartet wie:
A B
A
one 0 one 0
1 one 1
5 one 5
two 2 two 2
three 3 three 3
4 three 4
print df.groupby('A').head()
. Welche Version von Pandas hast du?df.groupby(['A', 'B']).sum()
, aber es würde fehlschlagen, wenn('A', 'B')
Paare nicht eindeutig sind.Antworten:
Einfach machen:
Das funktioniert auch,
Für die selektive Schlüsselgruppierung: Fügen Sie die gewünschten Schlüssel wie
key_list_from_gb
folgt in Folgendes eingb.keys()
: Beispiel:quelle
for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
key_list_from_gb
?Wenn Sie nur nach einer Möglichkeit suchen, es anzuzeigen, können Sie description () verwenden:
Dies gibt Ihnen einen ordentlichen Tisch.
quelle
Ich habe bestätigt, dass sich das Verhalten von
head()
Änderungen zwischen Version 0.12 und 0.13 ändert. Das sieht für mich nach einem Fehler aus. Ich habe ein Problem erstellt .Eine groupby-Operation gibt jedoch keinen nach Gruppen sortierten DataFrame zurück. Die
.head()
Methode ist hier etwas irreführend - es ist nur eine praktische Funktion, mit der Siedf
das von Ihnen gruppierte Objekt (in diesem Fall ) erneut untersuchen können . Das Ergebnisgroupby
ist eine separate Art von Objekt, einGroupBy
Objekt. Sie müssenapply
,transform
oderfilter
an einen Datenrahmen oder Serie zu kommen.Wenn Sie nur nach den Werten in Spalte A sortieren möchten, sollten Sie verwenden
df.sort('A')
.quelle
head
tatsächlichhead(5)
die ersten 5 Zeilendf.groupby('A').apply(lambda x: x)
angezeigt werden. Richtiger ist es , den Frame anzuzeigen, was effektiv ein Durchgang ist. Ich nehme an, Sie könnten vielleicht einepass()
Methode haben.Eine weitere einfache Alternative:
quelle
Eine andere einfache Alternative könnte sein:
quelle
Zusätzlich zu früheren Antworten:
Nehmen Sie Ihr Beispiel,
Dann einfach 1 Zeilencode
quelle
Vielen Dank an Surya für gute Einblicke. Ich würde seine Lösung bereinigen und einfach tun:
quelle
Sie können die groupBy-Daten nicht direkt per print-Anweisung sehen, aber Sie können sie durch Iteration über die Gruppe mit der for-Schleife sehen. Versuchen Sie diesen Code, um die Gruppe nach Daten zu sehen
Sie erhalten eine Ausgabe, nachdem Sie dies als Groupby-Ergebnis versucht haben
Ich hoffe, es hilft
quelle
Rufen Sie list () für das GroupBy-Objekt auf
gibt Ihnen:
quelle
Wenn Sie in Jupyter Notebook Folgendes tun, wird eine schöne gruppierte Version des Objekts gedruckt. Die
apply
Methode hilft bei der Erstellung eines Multiindex-Datenrahmens.Ausgabe:
Wenn Sie möchten, dass die
by
Spalte (n) nicht in der Ausgabe angezeigt werden, lassen Sie die Spalte (n) einfach so fallen.Ausgabe:
Hier bin ich mir nicht sicher, warum
.iloc[:]
nicht statt[:]
am Ende funktioniert . Wenn es also in Zukunft Probleme aufgrund von Updates (oder derzeit) gibt,.iloc[:len(a)]
funktioniert dies auch.quelle
Ich habe einen kniffligen Weg gefunden, nur für ein Brainstorming, siehe Code:
die Ausgabe:
Die Profis sind so einfach zu drucken, da sie anstelle von Groupby Object einen Datenrahmen zurückgeben. Und die Ausgabe sieht gut aus. Der Nachteil ist, dass eine Reihe redundanter Daten erstellt werden.
quelle
In Python 3
Auf interaktivere Weise
quelle
um alle (oder beliebig viele) Zeilen des gruppierten df zu drucken:
quelle