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 Datenrahmen gruppiert drucken?
Wenn ich mache:
print(df.groupby('A').head())
Ich erhalte den Datenrahmen, als ob er nicht gruppiert wäre:
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 sowas 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
Ich erhalte die korrekte Ausgabe mit print df.groupby('A').head(). Welche Panda-Version hast du?
– Amit
27. März 2014 um 15:06 Uhr
Ich habe gerade sowohl auf meinem Desktop als auch auf meinem Laptop auf 0.13.1 aktualisiert.
– Benutzer3465658
27. März 2014 um 15:14 Uhr
Wie wäre es, das Objekt direkt zu “listen()”? Und dann können Sie es als normale Datenstruktur manipulieren/drucken.
– Tropenpinguin
17. April 2018 um 7:48 Uhr
Soweit ich das beurteilen kann, schafft es keine einzige Antwort, die gewünschte Ausgabe zu erzeugen. Für dieses spezifische Beispiel war das nächste, was ich finden konnte df.groupby(['A', 'B']).sum()aber es würde fehlschlagen, wenn ('A', 'B') Paare sind nicht einzigartig.
– Eric Duminil
29. Juli 2019 um 11:47 Uhr
Hallo. Kann ich wissen, wie man “eins”, “zwei”, “drei” nur in der Ausgabe druckt? Was ich meine, ist nur die Daten zu drucken, die wir gruppiert haben. Ich möchte diese Daten verwenden, um mein Kreisdiagramm zu beschriften.
– xk derhaka
12. November 2021 um 3:12 Uhr
Surja
Einfach machen:
grouped_df = df.groupby('A')
for key, item in grouped_df:
print(grouped_df.get_group(key), "\n\n")
grouped_df = df.groupby('A')
gb = grouped_df.groups
for key, values in gb.iteritems():
print(df.ix[values], "\n\n")
Für selektive Schlüsselgruppierung: Fügen Sie die gewünschten Schlüssel in das ein key_list_from_gbim Folgenden mit gb.keys(): Zum Beispiel,
gb = grouped_df.groups
gb.keys()
key_list_from_gb = [key1, key2, key3]
for key, values in gb.items():
if key in key_list_from_gb:
print(df.ix[values], "\n")
Eine weitere Option ist: for A in d['A'].unique(): print(A, df.query(f'A == "{A}"'))
– tommy.carstensen
24. Mai 2017 um 10:10 Uhr
__iter__()funktioniert auch. Es gibt den Generator zurück, der eine Sequenz von (Name, untergeordnetes Objekt) für jede Gruppe ergibt
– Jeremy Z
27. April 2018 um 5:44 Uhr
Warum nicht überschleifen key_list_from_gb obwohl?
– Pfnüssel
11. September 2019 um 5:38 Uhr
Wenn Sie einfach nach einer Möglichkeit suchen, es anzuzeigen, können Sie “describe()” verwenden:
grp = df.groupby['colName']
grp.describe()
So erhalten Sie einen ordentlichen Tisch.
Es ist ein ordentlicher Tisch, aber es ist nicht der gewünschte Tisch.
Clever, obwohl es besser wäre, .apply(display) zu verwenden, um eine schöne Formatierung zu erhalten.
– set92
22. Januar 2021 um 12:57 Uhr
Einfach importieren display aus Ipython.display dafür 🙂
– Gajraj Singh Chouhan
3. Juni 2021 um 7:35 Uhr
Wenn Sie in Jupyter Notebook wie folgt vorgehen, wird eine schöne gruppierte Version des Objekts gedruckt. Das apply -Methode hilft bei der Erstellung eines Multiindex-Datenrahmens.
by = 'A' # groupby 'by' argument
df.groupby(by).apply(lambda a: a[:])
Ausgabe:
A B
A
one 0 one 0
1 one 1
5 one 5
three 3 three 3
4 three 4
two 2 two 2
Wenn du willst by Spalte(n) nicht in der Ausgabe erscheinen, löschen Sie einfach die Spalte(n) wie folgt.
Hier bin ich mir nicht sicher, warum .iloc[:] funktioniert nicht statt [:] Am Ende. Wenn es also in Zukunft aufgrund von Updates (oder derzeit) Probleme geben sollte, .iloc[:len(a)] funktioniert auch.
Ich bestätigte, dass das Verhalten von head() Änderungen zwischen Version 0.12 und 0.13. Das sieht für mich nach einem Bug aus. Ich habe eine erstellt Ausgabe.
Eine Groupby-Operation gibt jedoch keinen nach Gruppe sortierten DataFrame zurück. Das .head() -Methode ist hier etwas irreführend — es ist nur eine praktische Funktion, mit der Sie das Objekt erneut untersuchen können (in diesem Fall df), die Sie gruppiert haben. Das Ergebnis von groupby ist eine separate Art von Objekt, a GroupBy Objekt. Du musst apply, transformoder filter um zu einem DataFrame oder einer Serie zurückzukehren.
Wenn Sie nur nach den Werten in Spalte A sortieren wollten, sollten Sie verwenden df.sort('A').
beachten Sie, dass head macht eigentlich head(5) Im Folgenden werden die ersten 5 Zeilen angezeigt, richtiger ist es, den Rahmen zu ‘zeigen’ df.groupby('A').apply(lambda x: x), was praktisch eine Durchgangsverbindung ist. Ich nehme an, Sie könnten eine haben pass() Methode evtl.
– Jeff
27. März 2014 um 17:30 Uhr
Sumit Pokhrel
Eine weitere einfache Alternative:
for name_of_the_group, group in grouped_dataframe:
print (name_of_the_group)
print (group)
beachten Sie, dass head macht eigentlich head(5) Im Folgenden werden die ersten 5 Zeilen angezeigt, richtiger ist es, den Rahmen zu ‘zeigen’ df.groupby('A').apply(lambda x: x), was praktisch eine Durchgangsverbindung ist. Ich nehme an, Sie könnten eine haben pass() Methode evtl.
– Jeff
27. März 2014 um 17:30 Uhr
Surja
Eine andere einfache Alternative könnte auch sein:
Ich erhalte die korrekte Ausgabe mit
print df.groupby('A').head()
. Welche Panda-Version hast du?– Amit
27. März 2014 um 15:06 Uhr
Ich habe gerade sowohl auf meinem Desktop als auch auf meinem Laptop auf 0.13.1 aktualisiert.
– Benutzer3465658
27. März 2014 um 15:14 Uhr
Wie wäre es, das Objekt direkt zu “listen()”? Und dann können Sie es als normale Datenstruktur manipulieren/drucken.
– Tropenpinguin
17. April 2018 um 7:48 Uhr
Soweit ich das beurteilen kann, schafft es keine einzige Antwort, die gewünschte Ausgabe zu erzeugen. Für dieses spezifische Beispiel war das nächste, was ich finden konnte
df.groupby(['A', 'B']).sum()
aber es würde fehlschlagen, wenn('A', 'B')
Paare sind nicht einzigartig.– Eric Duminil
29. Juli 2019 um 11:47 Uhr
Hallo. Kann ich wissen, wie man “eins”, “zwei”, “drei” nur in der Ausgabe druckt? Was ich meine, ist nur die Daten zu drucken, die wir gruppiert haben. Ich möchte diese Daten verwenden, um mein Kreisdiagramm zu beschriften.
– xk derhaka
12. November 2021 um 3:12 Uhr