Wie gruppiere ich Pandas, um die Summe zu erhalten?
Lesezeit: 3 Minuten
Ernsthaft versuchen
Ich verwende diesen Datenrahmen:
Fruit Date Name Number
Apples 10/6/2016 Bob 7
Apples 10/6/2016 Bob 8
Apples 10/6/2016 Mike 9
Apples 10/7/2016 Steve 10
Apples 10/7/2016 Bob 1
Oranges 10/7/2016 Bob 2
Oranges 10/6/2016 Tom 15
Oranges 10/6/2016 Mike 57
Oranges 10/6/2016 Bob 65
Oranges 10/7/2016 Tony 1
Grapes 10/7/2016 Bob 1
Grapes 10/7/2016 Tom 87
Grapes 10/7/2016 Bob 22
Grapes 10/7/2016 Bob 12
Grapes 10/7/2016 Tony 15
Ich möchte dies aggregieren Name und dann vorbei Fruit um eine Gesamtzahl von zu erhalten Fruit pro Name. Zum Beispiel:
Bob,Apples,16
Ich habe versucht, Gruppierung nach Name und Fruit Aber wie bekomme ich die Gesamtzahl der Früchte?
df.groupby(['Fruit','Name']).sum()
Out[31]:
Number
Fruit Name
Apples Bob 16
Mike 9
Steve 10
Grapes Bob 35
Tom 87
Tony 15
Oranges Bob 67
Mike 57
Tom 15
Tony 1
Wie können Pandas wissen, dass ich die genannte Spalte summieren möchte Number ?
– Königsname
23. Oktober 2017 um 12:32 Uhr
@Kingname ist die letzte Spalte, die übrig bleibt, wenn Sie NAME und FRUIT herausnehmen. Wenn Sie 2 Spalten links hinzufügen, würden beide Spalten summiert
– Steven G
23. Oktober 2017 um 16:51 Uhr
Wie kann man angeben, welche Spalte summiert werden soll?
@StevenG Für die Antwort, die bereitgestellt wird, um eine bestimmte Spalte zusammenzufassen, wird die Ausgabe als Pandas-Serie anstelle von Dataframe ausgegeben. Aus dem Kommentar von Jakub Kukul (in der folgenden Antwort) können wir doppelte eckige Klammern um „Number“ verwenden, um einen Dataframe zu erhalten.
Dies unterscheidet sich von der akzeptierten Antwort darin, dass dies a zurückgibt Series während der andere a zurückgibt GroupBy Objekt.
– Gaurang Tandon
8. Mai 2019 um 15:53 Uhr
@GaurangTandon zu bekommen DataFrame verwenden Sie stattdessen (wie in der akzeptierten Antwort) doppelte eckige Klammern 'Number'dh: df.groupby(['Name', 'Fruit'])[['Number']].agg('sum')
– Jakub Kukul
21. August 2019 um 17:05 Uhr
Sehr hilfreich beim Bereinigen eines schlecht codierten Abfrageberichts.
– SearchTools-Avi
9. Oktober 2019 um 20:39 Uhr
Wenn Sie die ursprünglichen Spalten beibehalten möchten Fruit und Nameverwenden reset_index(). Andernfalls Fruit und Name wird Bestandteil des Indexes.
df.groupby(['Fruit','Name'])['Number'].sum().reset_index()
Fruit Name Number
Apples Bob 16
Apples Mike 9
Apples Steve 10
Grapes Bob 35
Grapes Tom 87
Grapes Tony 15
Oranges Bob 67
Oranges Mike 57
Oranges Tom 15
Oranges Tony 1
Wie in den anderen Antworten zu sehen:
df.groupby(['Fruit','Name'])['Number'].sum()
Number
Fruit Name
Apples Bob 16
Mike 9
Steve 10
Grapes Bob 35
Tom 87
Tony 15
Oranges Bob 67
Mike 57
Tom 15
Tony 1
Die beiden anderen Antworten erreichen, was Sie wollen.
Du kannst den … benutzen pivot Funktionalität, um die Daten in einer schönen Tabelle anzuordnen
df.groupby(['Fruit','Name'],as_index = False).sum().pivot('Fruit','Name').fillna(0)
Name Bob Mike Steve Tom Tony
Fruit
Apples 16.0 9.0 10.0 0.0 0.0
Grapes 35.0 0.0 0.0 87.0 15.0
Oranges 67.0 57.0 0.0 15.0 1.0
df.groupby(['Fruit','Name'])['Number'].sum()
Sie können verschiedene Spalten auswählen, um Zahlen zu summieren.
xyjoel
Eine Variation der Funktion .agg(); bietet die Möglichkeit, (1) den DataFrame-Typ beizubehalten, (2) Mittelwerte, Zählungen, Summierungen usw. anzuwenden und (3) Groupby für mehrere Spalten zu aktivieren, während die Lesbarkeit erhalten bleibt.
Sie können die einstellen groupby Spalte zu index dann verwenden sum mit level
df.set_index(['Fruit','Name']).sum(level=[0,1])
Out[175]:
Number
Fruit Name
Apples Bob 16
Mike 9
Steve 10
Oranges Bob 67
Tom 15
Mike 57
Tony 1
Grapes Bob 35
Tom 87
Tony 15
10919500cookie-checkWie gruppiere ich Pandas, um die Summe zu erhalten?yes
Sie können dfsql df.sql(‘SELECT fruit, sum(number) GROUP BY fruit’) github.com/mindsdb/dfsql medium.com/riselab/…
– Jorge Torres
20. April 2021 um 6:35 Uhr