Wie gruppiere ich Pandas, um die Summe zu erhalten?

Lesezeit: 3 Minuten

Benutzer-Avatar
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?

Benutzer-Avatar
Steven G

Verwenden GroupBy.sum:

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?

    – tgn

    5. November 2019 um 14:38 Uhr

  • @tgdn df.groupby([‘Name’, ‘Fruit’])[‘Number’].Summe()

    – Steven G

    8. November 2019 um 17:34 Uhr

  • @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.

    – skdhfgeq2134

    16. Januar 2020 um 10:41 Uhr


Sie können auch die agg-Funktion verwenden,

df.groupby(['Name', 'Fruit'])['Number'].agg('sum')

  • 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.

Benutzer-Avatar
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.

df.groupby(['att1', 'att2']).agg({'att1': "count", 'att3': "sum",'att4': 'mean'})

mit deinen Werten…

df.groupby(['Name', 'Fruit']).agg({'Number': "sum"})

Benutzer-Avatar
BENY

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

1091950cookie-checkWie gruppiere ich Pandas, um die Summe zu erhalten?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy