Fonction Pandas groupby.sum()

Fonctions courantes de Pandas


groupby.sum()est une fonction d'agrégation dans Pandas utilisée pour additionner après regroupement. Elle est généralement utilisée avecgroupby()la fonction, qui regroupe d'abord les données par les valeurs d'une colonne, puis additionne les colonnes numériques de chaque groupe.

Dans l'analyse de données réelle,sum()elle est l'une des fonctions d'agrégation les plus couramment utilisées. Par exemple, calculer le salaire total pour chaque département, les ventes totales pour chaque région, la quantité totale pour chaque catégorie, etc.


Syntaxe de base et paramètres

sum()est une fonction membre de l'objet GroupBy. Vous devez d'abord utilisergroupby()pour regrouper les données, puis l'appeler.

Format de syntaxe

GroupBy.sum(numeric_only=False, min_count=-1, engine=None, engine_kwargs=None)

Description du paramètre

Paramètre Type Description Valeur par défaut
numeric_only bool Si True, seules les colonnes numériques sont additionnées ; si False, il tente d'additionner toutes les colonnes. False
min_count int Le nombre minimum de valeurs valides requises pour la sommation. S'il y a moins de valeurs valides que ce nombre dans un groupe, NaN est renvoyé. -1
engine str Spécifie le moteur de calcul, qui peut être 'cython' ou 'numba'. None signifie que Pandas le sélectionne automatiquement. Aucune
engine_kwargs dict Un dictionnaire de paramètres supplémentaires transmis au moteur sous-jacent. Aucune

Valeur de retour

  • Type de retour:SeriesouDataFrame
  • Description: Renvoie le résultat après regroupement et sommation. Si appliqué à une seule colonne, il renvoie une Series ; si appliqué à plusieurs colonnes, il renvoie un DataFrame.

Exemples

À travers une série d'exemples du plus simple au plus complexe, maîtrisons parfaitementgroupby.sum()l'utilisation.

Exemple 1 : Utilisation de base - Regrouper par une seule colonne et additionner

L'utilisation la plus basique consiste à regrouper selon les valeurs d'une colonne, puis à additionner une autre colonne.

Exemple

import pandas as pd

# Créer un DataFrame de données de ventes
# Simuler une table contenant région, produit et ventes
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China'],
    'product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Sales amount': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Quantity': [10, 20, 15, 18, 22, 16, 12, 21]
}

# Créer un DataFrame
df = pd.DataFrame(data)

print("Données de ventes d'origine :")
print(df)
print()

# Regrouper par "Region" et calculer le total des ventes pour chaque région
sales_by_region = df.groupby('Region')['Sales amount'].sum()

print(Total des ventes par région :)
print(sales_by_region)
print()

# Regrouper par "Product" et calculer la quantité totale des ventes pour chaque produit
quantity_by_product = df.groupby('product')['Quantity'].sum()

print(Quantité totale des ventes pour chaque produit :)
print(quantity_by_product)

Sortie :

原始销售数据:
  地区  产品   销售额   数量
0  华北   A   1000    10
1  华东   B   2000    20
2  华南   C   1500    15
3  华北   B   1800    18
4  华东   A   2200    22
5  华南   C   1600    16
6  华北   A   1200    12
7  华东   B   2100    21

每个地区的总销售额:
地区
华东    7100
华南    3100
华北    4000
dtype: int64

每个产品的总销售数量:
产品
A    44
B    59
C    31
dtype: int64

Explication du code :

  1. df.groupby('地区')['销售额']Indique que les données sont d'abord groupées par la colonne 'Region', puis que la colonne 'Sales amount' est sélectionnée pour l'opération.
  2. .sum()Additionnez les ventes dans chaque groupe.
  3. Le résultat renvoyé est une Series, et l'index correspond aux valeurs de la colonne de regroupement (c'est-à-dire les noms des régions).

Exemple 2 : Grouper par plusieurs colonnes et faire la somme

Vous pouvez regrouper par plusieurs colonnes en même temps, puis faire la somme des colonnes numériques.

Exemple

import pandas as pd

# Créer des données de ventes
data = {
    'Region': ['North China', 'East China', 'South China', 'North China', 'East China', 'South China', 'North China', 'East China'],
    'product': ['A', 'B', 'C', 'B', 'A', 'C', 'A', 'B'],
    'Sales amount': [1000, 2000, 1500, 1800, 2200, 1600, 1200, 2100],
    'Quantity': [10, 20, 15, 18, 22, 16, 12, 21]
}
df = pd.DataFrame(data)

print("Données de ventes d'origine :")
print(df)
print()

# Grouper par les colonnes 'Region' et 'Product', calculer le total des ventes et la quantité totale
# as_index=False signifie que la colonne de regroupement est conservée comme une colonne normale dans le résultat.
grouped = df.groupby(['Region', 'product'], as_index=False).sum()

print("Total après regroupement par région et produit :")
print(grouped)
print()

# Sinon, vous pouvez faire la somme de toutes les colonnes numériques sans spécifier de colonnes
grouped_all = df.groupby(['Region', 'product']).sum()
print("Somme de toutes les colonnes numériques (renvoie un DataFrame) :")
print(grouped_all)

Sortie :

原始销售数据:
  地区  产品   销售额   数量
0  华北   A   1000    10
1  华东   B   2000    20
2  华南   C   1500    15
3  华北   B   1800    18
4  华东   A   2200    22
5  华南   C   1600    16
6  华北   A   1200    12
7  华东   B   2100    21

按地区和产品分组后的总计:
   地区  产品   销售额   数量
0  华东   A   2200    22
1  华东   B   4100    41
2  华南   C   3100    31
3  华北   A   2200    22
4  华北   B   1800    18

对所有数值列求和(返回DataFrame):
              销售额  数量
地区 产品
华东 A    2200   22
     B    4100   41
华南 C    3100   31
华北 A    2200   22
     B    1800   18

Explication du code :

  • ['Region', 'Product']L'utilisation d'une liste permet de regrouper par plusieurs colonnes en même temps.
  • as_index=FalseDans ce cas, le résultat est au format DataFrame, et les colonnes de regroupement sont conservées en tant que colonnes ordinaires.
  • Lorsqu'aucune colonne n'est spécifiée (par exemple,.sum()), la somme de toutes les colonnes numériques est calculée.

Exemple 3 : Utilisation du paramètre min_count

min_countCe paramètre contrôle le nombre minimum de valeurs valides requises pour la somme par groupe. Lorsque le nombre de valeurs valides dans un groupe est inférieur à ce nombre, NaN est renvoyé.

Exemple

import pandas as pd
import numpy as np

# Créer des données avec des valeurs manquantes
data = {
    'Department': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
    'salary': [5000, 6000, np.nan, 7000, np.nan, np.nan, 8000, 9000, 10000]
}
df = pd.DataFrame(data)

print(Données de salaire des employés (y compris les valeurs manquantes) :)
print(df)
print()

# Par défaut, sum() ignore les valeurs NaN lors de la somme
sum_default = df.groupby('Department')['salary'].sum()
print(Somme par défaut (en ignorant NaN) :)
print(sum_default)
print()

# Définir min_count=3, nécessitant au moins 3 valeurs valides pour effectuer la somme
sum_min_count = df.groupby('Department')['salary'].sum(min_count=3)
print(Résultat de la somme lorsque min_count=3 :)
print(sum_min_count)
print()

# Définir min_count=2
sum_min_count2 = df.groupby('Department')['salary'].sum(min_count=2)
print(Résultat de la somme lorsque min_count=2 :)
print(sum_min_count2)

Sortie :

员工工资数据(包含缺失值):
  部门     工资
0  A  5000.0
1  A  6000.0
2  A     NaN
3  B  7000.0
4  B     NaN
5  B     NaN
6  C  8000.0
7  C  9000.0
8  C  10000.0

默认求和(忽略NaN):
部门
A    11000.0
B     7000.0
C    27000.0
dtype: float64

min_count=3 时的求和结果:
部门
A    11000.0
B         NaN
C    27000.0
dtype: float64

min_count=2 时的求和结果:
部门
A    11000.0
B     7000.0
C    27000.0
dtype: float64

Explication du code :

  • Par défaut,sum()il ignore les valeurs NaN et n'additionne que les valeurs valides.
  • min_count=3Cela signifie que chaque groupe doit avoir au moins 3 valeurs valides avant que la somme ne soit calculée ; sinon, NaN est renvoyé.
  • Le département A a 2 valeurs valides (5000 et 6000), ce qui ne respecte pas min_count=3, donc il renvoie NaN ; le département C a 3 valeurs valides, il peut donc être sommé normalement.

Notes :sum()Par défaut, les valeurs NaN sont ignorées lors de la somme, ce qui est cohérent avec notre compréhension quotidienne de la gestion de "null". Si vous devez traiter NaN comme 0 avant la somme, vous pouvez d'abord utiliserfillna(0)la méthode pour remplir les valeurs manquantes.


Fonctions courantes de Pandas

Autres extensions