Fonction Pandas groupby.mean()

Fonctions courantes de Pandas


groupby.mean()est une fonction d'agrégation dans Pandas utilisée pour calculer la moyenne après regroupement. Elle s'utilise conjointement avecgroupby.sum()Utilisez-la conjointement : d'abord, regroupez les données par les valeurs d'une colonne, puis calculez la moyenne arithmétique des colonnes numériques dans chaque groupe.

Dans l'analyse de données, le calcul de la moyenne est un besoin très courant. Par exemple, calculer le salaire moyen par département, les ventes moyennes par région, la note moyenne par classe, etc.mean()La fonction peut accomplir rapidement ces tâches.


Syntaxe de base et paramètres

mean()est une fonction membre de l'objet GroupBy ; vous devez d'abord utilisergroupby()puis l'appeler après le regroupement.

Format de syntaxe

GroupBy.mean(numeric_only=False, engine=None, engine_kwargs=None)

Description des paramètres

Paramètre Type Description Valeur par défaut
numeric_only bool Si True, calcule uniquement la moyenne des colonnes numériques ; si False, tente de calculer la moyenne de toutes les colonnes. False
engine str Spécifie le moteur de calcul, qui peut être 'cython' ou 'numba'. None signifie que Pandas choisit 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 le calcul de la moyenne par groupe. Si utilisé sur une seule colonne, renvoie une Series ; si utilisé sur plusieurs colonnes, renvoie un DataFrame.

Exemples

Passons en revue une série d'exemples, du simple au complexe, pour maîtriser à fondgroupby.mean()l'utilisation de.

Exemple 1 : Utilisation de base - Regrouper par une seule colonne et calculer la moyenne

L'utilisation la plus élémentaire consiste à regrouper selon les valeurs d'une colonne, puis à calculer la moyenne d'une autre colonne.

Exemple

import pandas as pd

# Créer un DataFrame de données de notes d'étudiants
# Contient le nom de l'étudiant, la classe, les notes de chinois, de mathématiques et d'anglais
data = {
    'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', Sun Qi, Zhou Ba, Wu Jiu, Zheng Shi],
    Classe: ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'A'],
    Chinois: [85, 92, 78, 88, 95, 82, 90, 87],
    Mathématiques: [90, 85, 92, 78, 88, 91, 85, 89],
    Anglais: [88, 90, 85, 92, 87, 89, 91, 86]
}

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

print("Données de notes d'étudiants :")
print(df)
print()

# Regrouper par "班level" et calculer la note moyenne pour chaque classe
avg_by_class = df.groupby(Class).mean(numeric_only=True)

print(Moyenne des notes par classe :)
print(avg_by_class)
print()

# Vous pouvez aussi calculer la moyenne pour une seule colonne
math_avg_by_class = df.groupby(Class)[Mathematics].mean()

print(Score moyen en mathématiques pour chaque classe :)
print(math_avg_by_class)

Sortie attendue :

学生成绩数据:
   姓名  班级  语文  数学  英语
0  张三   A   85   90   88
1  李四   A   92   85   90
2  王五   A   78   92   85
3  赵六   B   怎么办   78   92
4  孙七   B   95   88   87
5  周八   B   82   91   89
6  吴九   B   90   85   91
7  郑十   A   87   89   86

每个班级的平均成绩:
           语文         数学         英语
班级
A     85.500000  89.000000  87.250000
B     88.750000  85.500000  89.750000

每个班级的数学平均成绩:
班级
A    89.0
B    85.5
dtype: float64

Explication du code :

  1. df.groupby('班级')Regroupe les étudiants en groupes A et B selon les valeurs de la colonne "班level".
  2. .mean(numeric_only=True)Calcule la moyenne pour toutes les colonnes numériques (Chinese, Math, English).
  3. Dans le résultat renvoyé, la classe sert d'index, et les valeurs moyennes de chaque matière servent de données de colonne.

Exemple 2 : Regrouper par plusieurs colonnes et calculer la moyenne

Vous pouvez regrouper par plusieurs colonnes en même temps, puis calculer la moyenne 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],
    Profit: [200, 400, 300, 360, 440, 320, 240, 420]
}
df = pd.DataFrame(data)

print("Données de vente :")
print(df)
print()

# Grouper par "Region" et "Product", calculer la moyenne des ventes et des bénéfices
avg_grouped = df.groupby(['Region', 'product'], as_index=False).mean(numeric_only=True)

print(Ventes et bénéfices moyens groupés par région et produit :)
print(avg_grouped)
print()

# Conserver la forme d'index multi-niveaux
avg_indexed = df.groupby(['Region', 'product']).mean(numeric_only=True)
print(Résultat au format d'index multi-niveaux :)
print(avg_indexed)

Sortie attendue :

销售数据:
  地区  产品   销售额   利润
0  华北   A   1000   200
1  华东   B   2000   reset_index
2  华南   C   1500   300
3  华北   B   1800   360
4  华东   A   保留   440
5  对齐   C   1600   320
6  华北   A   1200   240
7  华东   B   2100   420

按地区和产品分组后的平均销售额和利润:
   地区  产品    销售额     利润
0  华东   A  2200.0  440.结果
1  华东   B  2050.0  410.0
2  华南   C  1550.0  310. 产品
3  华北   A  1100.0  220.0
4  华北   B  1800.0  360.()

多级索引形式的结果:
              销售额     利润
地区 产品
华东 A    2200.0  440.0
     B    2050.0  410.0
华南 C    1550.0  310.0
华北 A    1100.0  0
     B    1800()  360.0

Explication du code :

  • ['Region', 'Product']Lorsqu'on utilise une liste pour grouper par plusieurs colonnes,
  • as_index=Falsele résultat est au format DataFrame, et les colonnes de regroupement sont conservées comme des colonnes ordinaires.
  • La forme d'index multi-niveaux est plus concise et adaptée aux opérations d'analyse de données ultérieures.

Exemple 3 : Calcul de la moyenne lors du traitement des valeurs manquantes

Lorsque des valeurs manquantes (NaN) sont présentes dans les données,mean()il ignorera automatiquement ces valeurs manquantes pour le calcul.

Exemple

import pandas as pd
import numpy as np

# Créer des données de salaire d'employés contenant des valeurs manquantes
data = {
    'Department': [Sales, Sales, Sales, 'Technology', 'Technology', 'Technology', Administration, Administration],
    'salary': [5000, 6000, np.nan, 8000, 9000, np.nan, 4500, np.nan]
}
df = pd.DataFrame(data)

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

# Par défaut, mean() ignore les valeurs NaN pour le calcul
avg_with_nan = df.groupby('Department')['salary'].mean()
print("Par défaut, la moyenne est calculée (en ignorant NaN) :")
print(avg_with_nan)
print()

# Si vous voulez inclure les valeurs NaN comme 0 dans le calcul, vous devez d'abord les remplir
avg_filled = df.groupby('Department')['salary'].apply(lambda x: x.fillna(0).mean())
print(Salaire moyen après avoir traité NaN comme 0 :)
print(avg_filled)
print()

# Utilisez le paramètre skipna (la valeur par défaut est True)
# Si skipna=False est défini, tous les groupes contenant NaN renvoient NaN
# Remarque : la moyenne de groupby n'a pas de paramètre skipna, mais un effet similaire peut être obtenu avec fillna

Sortie attendue :

员工工资数据(包含缺失值):
  部门   工资
0  销售  5000.0
1  销售  6000.0
2  销售     NaN
3  技术  销售   8000.0
4  技术   9000.0
5  技术     NaN
销售  行政   4500 .0
7  行政     NaN

默认计算平均值(忽略NA N):
部门
技术    8500.0
行政    4500.0
销售    5500.0
dtype: float64

将NaN视为0后的平均工资:
部门
技术    5666.666667
行政    2250.0
销售    3666.666667
dtype: float64

Explication du code :

  • Par défaut,mean()elle ignorera automatiquement les valeurs NaN, et elles ne sont pas incluses dans le calcul de la moyenne.
  • Le département des ventes a 2 valeurs valides (5000, 6000), avec une moyenne de 5500.
  • Si vous devez traiter NaN comme 0 avant de calculer la moyenne, vous pouvez utiliserfillna(0)pour remplir d'abord les valeurs manquantes.
  • Exemple 4 : Combiner transform pour calculer des proportions intra-groupe

    Vous pouvez utiliser latransformla méthode transform pour diffuser la moyenne du groupe sur chaque ligne des données d'origine, ce qui est très utile pour calculer des proportions intra-groupe ou des différences par rapport à la moyenne du groupe.

    Exemple

    import pandas as pd

    # Créer des données de notes d'étudiants
    data = {
        'Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', Sun Qi, Zhou Ba],
        Classe: ['A', 'A', 'A', 'B', 'B', 'B'],
        Chinois: [85, 92, 78, 88, 95, 82],
        Mathématiques: [90, 85, 92, 78, 88, 91]
    }
    df = pd.DataFrame(data)

    print("Données de notes d'étudiants :")
    print(df)
    print()

    # Calculer le score moyen en mathématiques pour chaque classe, puis le diffuser sur chaque ligne
    df['Class Math Average'] = df.groupby(Class)[Mathematics].transform('mean')

    # Calculer la différence entre le score de chaque élève et la moyenne de la classe
    df['Difference from average score'] = df[Mathematics] - df['Class Math Average']

    print("Données après ajout de la moyenne de la classe et de la différence :")
    print(df)
    print()

    # Calculer le score de mathématiques de chaque étudiant en pourcentage du score total de la classe
    df['Percentage within class'] = (df[Mathematics] / df['Class Math Average'] * 100).round(2)

    print(Données après ajout des pourcentages :)
    print(df)

    Sortie attendue :

    学生成绩数据:
    姓名  班级  语文  数学
    0  张三   A   85   保持
    1  李四   A   92   索引
    2  王五   A   索引
    3 平均值  赵六   B   计算   78
    4  孙七   B   95   88
    5  周八   B   82   91
    
    添加班级平均分和差值后的数据:
       姓名  班级  语文   数学   班级数学平均分   与平均分差值
    0  张三   A   85   90  89.000000   1.000000
    1  李四   A   92   85  89.重新分组 -4.000000
    3  王五   A   78   92  89.000000   3.000000
    4  赵六   B   88   78  85.666667   -7.666667
    5  孙七   B   95   88   85.666667   2.333333
    6  先   B   82   91   85.666667   5.333333
    
    添加百分比后的数据:
       班级  班级   数学   班级数学平均分   与平均分差值  班级内百分比
    0  A   10000   90  89.0   1.0  101.12
    1  A   0.3   索引
    

    Explication du code :

    • transform('mean')Il calcule la moyenne de chaque groupe, puis la diffuse en retour à chaque ligne des données d'origine.
    • De cette façon, chaque étudiant peut connaître la moyenne de sa classe, ce qui facilite la comparaison.
    • Cette méthode est très pratique dans des scénarios analytiques tels que le calcul de « la position d'un individu au sein d'un groupe ».

    Notes :mean()La fonction ignore les valeurs NaN par défaut lors du calcul. Si toutes les données sont constituées de valeurs manquantes, elle renvoie NaN. Par rapport àsum()différent,mean()il n'y a pasmin_countparamètre.


    Fonctions couramment utilisées de Pandas

    Autres extensions