Como Obter o Agregado de Pandas Group-By e Sum

  1. Soma cumulativa com agg()
  2. pivot() para reordenar os dados em uma tabela de Nice
  3. Aplicar function a groupby em Pandas
  4. agg() para obter a Soma Agregada da Coluna

Demonstraremos como obter o agregado em Pandas utilizando groupby e sum. Também analisaremos a funcionalidade pivot para organizar os dados em uma bela tabela e definir nossa função personalizada e executá-la no dataframe. Também obteremos a soma agregada utilizando o agg().

Soma cumulativa com agg()

Podemos obter a soma cumulativa utilizando o método groupby. Considere o seguinte quadro de dados com as colunas Date, Fruit e Sale:

import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
                   'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
                   'Sale': [34, 12, 22, 27]})

Se quisermos calcular a soma cumulativa de Venda por Fruta e para cada data, podemos fazer:

import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
                   'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
                   'Sale': [34, 12, 22, 27]})
print (df.groupby(by=['Fruit','Date']).sum().groupby(level=[0]).cumsum())

Resultado:

Fruit  Date         Sale
Apple  08/09/2018    34
       10/09/2018    46
Banana 08/09/2018    22
       10/09/2018    49

pivot() para reordenar os dados em uma tabela de Nice

O método pivot() poderia definir o atributo de linha e coluna da tabela. Vamos mudar o código acima e aplicar o método pivot() para reorganizar os dados em uma bela tabela:

import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
                   'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
                   'Sale': [34, 12, 22, 27]})    
print (df.groupby(['Fruit','Date'],as_index = False).sum().pivot('Fruit','Date').fillna(0))

Resultado:

             Sale           
Date   08/09/2018 10/09/2018
Fruit                       
Apple          34         12
Banana         22         27

Aplicar function a groupby em Pandas

Vamos criar um método simples para obter a contagem de valores em Series ou array 1d e utilizar groupby para obter a contagem agregada de cada valor:

from pandas import *
d = {"series": Series(['1','2','1','1','4','4','5'])}
df = DataFrame(d)
def get_count(values):
    return len(values)
grouped_count = df.groupby("series").series.agg(get_count)
print(grouped_count)

Depois de executar o código, obteremos a seguinte saída, que fornece a ocorrência de cada valor na série.

Resultado:

series
1    3
2    1
4    2
5    1
Name: series, dtype: int64

agg() para obter a Soma Agregada da Coluna

Podemos utilizar agg() para aplicar a operação de soma na coluna. Códigos de exemplo:

import pandas as pd
df = pd.DataFrame({'Date': ['08/09/2018', '10/09/2018', '08/09/2018', '10/09/2018'],
                   'Fruit': ['Apple', 'Apple', 'Banana', 'Banana',],
                   'Sale': [34, 12, 22, 27]})
print(df.groupby(['Fruit'])['Sale'].agg('sum'))

Resultado:

Fruit
Apple     46
Banana    49
Name: Sale, dtype: int64

Artigo relacionado - Pandas DataFrame

  • Converter NumPy Array em Pandas DataFrame
  • Como excluir uma linha com base no valor da coluna em Pandas DataFrame