Seite 1 von 1

Über gruppiertes Dataframe mit aggregierten Werten iterieren und ausgeben

Verfasst: Donnerstag 5. September 2019, 13:34
von jodu
Hallo,

ich habe ein pandas.DataFrame gruppiert nach mehreren Spalten und möchte die (restlichen) beiden numerischen Spalten ("Wert1", "Wert2") jeweils pro Gruppe aufsummieren.
Anschließende möchte ich die Gruppen durchlaufen und diese sowie die dazugehörigen aggregierten Summen ausgeben.
Mein folgender Ansatz war leider bzgl. der Iteration erfolglos:

Code: Alles auswählen

df_grouped = df.groupby(["Spalte1", "Spalte2", "Spalte3", "Spalte4"]).sum()
for grp, agg_results in df_grouped:
	print(grp[0], grp[1], grp[2], grp[3], str(agg_results[0]), str(agg_results[1]))
Der Print-Befehl steht nur stellvertretend. Tatsächlich sollen die Gruppen-Elemente dann Variablen zugewiesen werden.

Für Hilfe wäre ich sehr dankbar!

MfG
Jodu

Re: Über gruppiertes Dataframe mit aggregierten Werten iterieren und ausgeben

Verfasst: Donnerstag 5. September 2019, 17:54
von jodu
Habe inzwischen nach längerem Suchen eine Lösung gefunden:

Code: Alles auswählen

df_grouped = df.groupby(["Spalte1", "Spalte2", "Spalte3", "Spalte4"]).sum()
for grp in df_grouped.index:
	spalte1 = grp[0]
	spalte2 = grp[1]
	spalte3 = grp[2]
	spalte4 = grp[3]	
	wert1 = df_grouped.loc[grp][0]
        wert2 = df_grouped.loc[grp][1]

Re: Über gruppiertes Dataframe mit aggregierten Werten iterieren und ausgeben

Verfasst: Donnerstag 5. September 2019, 18:24
von Sirius3
Du suchst einfach `iterrows`:

Code: Alles auswählen

for grp, agg_results in df_grouped.iterrows():
    print(grp[0], grp[1], grp[2], grp[3], agg_results.iloc[0], agg_results.iloc[1])
Eingerückt wird übrigens mit 4 Leerzeichen, keine Tabs.

Re: Über gruppiertes Dataframe mit aggregierten Werten iterieren und ausgeben

Verfasst: Donnerstag 5. September 2019, 19:22
von __blackjack__
Und wenn man das Varialen zuweist kann man das einfacher schreiben als selbst in jeder Zeile einen laufenden Index hinzuschreiben:

Code: Alles auswählen

   for grp, agg_results in df_grouped.iterrows():
        spalte_a, spalte_b, spalte_c, spalte_d = grp
        wert_a, wert_b = agg_results
        # Do something…
Oder:

Code: Alles auswählen

    for (
        (spalte_a, spalte_b, spalte_c, spalte_d),
        (wert_a, wert_b),
    ) in df_grouped.iterrows():
        # Do something…

Re: Über gruppiertes Dataframe mit aggregierten Werten iterieren und ausgeben

Verfasst: Samstag 7. September 2019, 16:23
von jodu
Danke vielmals für die Verbesserungsvorschläge!