it-swarm.com.de

Pandas gruppiert nach und summiert

Ich benutze 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 nach Namen und dann nach Früchten aggregieren, um eine Gesamtzahl von Früchten pro Name zu erhalten.

Bob,Apples,16 ( for example )

Ich habe versucht, nach Name und Frucht zu gruppieren, aber wie erhalte ich die Gesamtzahl der Früchte?.

114
Trying_hard

verwenden Sie die Methode 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
121
Steven G

Sie können auch die Funktion agg verwenden.

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

Wenn Sie die ursprünglichen Spalten Fruit und Name beibehalten möchten, verwenden Sie reset_index(). Andernfalls werden Fruit und Name Teil des Index.

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
43
Gazala Muhamed

Die beiden anderen Antworten erfüllen Ihre Wünsche.

Mit der Funktion pivot können Sie die Daten in einer Nice-Tabelle anordnen

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
30
Demetri Pananos
df.groupby(['Fruit','Name'])['Number'].sum()

Sie können verschiedene Spalten auswählen, um die Zahlen zu summieren.

13
jared

Sie können groupby und sum verwenden:

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

               Number
Name  Fruit          
Bob   Apples       16
      Grapes       35
      Oranges      67
Mike  Apples        9
      Oranges      57
Steve Apples       10
Tom   Grapes       87
      Oranges      15
Tony  Grapes       15
      Oranges       1
6
Batsu

Sie können die Spalte groupby auf index setzen und dann sum mit level verwenden.

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
2
WeNYoBen

Diese Antwort dient nur zum Verständnis der Funktionsweise von groupby und sum.

Ich verwende den Datensatz "Niederschlag in Indien seit 1900 bis 2015"

Mein Datensatz enthält Spalten wie "Unterteilung" und "jährlich".

Hier möchte ich also die Summe der jährlichen Niederschläge für jede Unterteilung berechnen.

Total = Data.groupby('SUBDIVISION')['ANNUAL'].sum()
print (Total)

auf diese Weise wird die Unterteilung gruppiert und die Summe der jährlichen Niederschläge pro Unterteilung ermittelt.

1
vaibhav pawar