Domanda Pandas group-by e somma


Sto usando questo frame di dati:

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

Voglio aggregare questo per nome e poi per frutto per ottenere un numero totale di frutta per nome.

Bob,Apples,16 ( for example )

Ho provato a raggruppare per Nome e Frutta ma come ottengo il numero totale di frutta.


44
2017-10-07 17:36


origine


risposte:


usa il metodo 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

52
2017-10-07 17:37



Inoltre puoi usare la funzione agg,

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

20
2017-10-08 11:40



Entrambe le altre risposte realizzano ciò che desideri.

Puoi usare il pivot funzionalità per organizzare i dati in una bella tabella

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

11
2017-10-07 18:35



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

È possibile selezionare diverse colonne per sommare i numeri.


6
2018-03-11 00:29



Puoi usare groupby e sum:

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

5
2017-10-07 17:44



Se si desidera mantenere le colonne originali Fruit e Name, uso reset_index(). Altrimenti Fruit e Name diventerà parte dell'indice.

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

Come visto nelle altre risposte:

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

1
2017-07-02 10:01



Questa risposta è solo per capire come funzionano groupby e sum.

Utilizzo il set di dati "Piovosità in India dal 1900 al 2015"

Il mio set di dati include colonne come "suddivisione" e "annuale".

Quindi, qui vorrei calcolare la somma delle precipitazioni annuali per ogni suddivisione.

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

questo è il modo in cui la suddivisione verrà raggruppata e otterremo la somma delle precipitazioni annuali per suddivisione.


0
2017-08-03 10:06