Comment obtenir l'agrégat des Pandas par groupe et par somme

Asad Riaz 30 janvier 2023
  1. Somme cumulée avec groupby
  2. pivot() pour réorganiser les données dans un tableau
  3. Appliquer la fonction à groupby dans Pandas
  4. agg() pour obtenir la somme agrégée de la colonne
Comment obtenir l'agrégat des Pandas par groupe et par somme

Nous démontrerons que nous obtenons l’agrégat Pandas par groupe (groupby) et par somme. Nous examinerons également la fonctionnalité pivot qui permet d’organiser les données dans un joli tableau et comment nous pouvons définir notre fonction personnalisée et l’appliquer sur le DataFrame. Nous obtiendrons également la somme globale en utilisant agg().

Somme cumulée avec groupby

Nous pouvons obtenir la somme cumulative en utilisant la méthode groupby. Considérons le DataFrame suivante avec la date, le nom du fruit et la vente à cette date:

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],
    }
)

Si nous voulons calculer la somme cumulée des ventes par fruit et pour chaque date, nous pouvons le faire:

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())

Production:

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

pivot() pour réorganiser les données dans un tableau

La méthode pivot() peut définir les attributs de ligne et de colonne du tableau. Changeons le code ci-dessus et appliquons la méthode pivot() pour réarranger les données dans un beau tableau:

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)
)

Production:

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

Appliquer la fonction à groupby dans Pandas

Nous allons créer une méthode simple pour obtenir le nombre de valeurs dans un tableau de séries ou un tableau 1d et utiliser un groupe par groupe pour obtenir le nombre total de chaque valeur:

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)

Après avoir exécuté le code, nous obtiendrons la sortie suivante qui fournit l’occurrence de chaque valeur dans la série.

Production:

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

agg() pour obtenir la somme agrégée de la colonne

Nous pouvons utiliser agg() pour appliquer l’opération de somme sur la colonne. Considérons le code suivant:

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"))

Production:

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

Article connexe - Pandas DataFrame