Maison >développement back-end >Tutoriel Python >Comment calculer des statistiques par groupe (nombre, moyenne, etc.) dans Pandas GroupBy ?

Comment calculer des statistiques par groupe (nombre, moyenne, etc.) dans Pandas GroupBy ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-28 04:36:10533parcourir

How to Calculate Group-wise Statistics (Count, Mean, etc.) in Pandas GroupBy?

Obtenez des statistiques pour chaque groupe (nombre, moyenne, etc.) à l'aide de Pandas GroupBy

Problème :

Vous avez un DataFrame df dans Pandas et souhaitez calculer des statistiques par groupe telles que la moyenne, le nombre, etc. sur plusieurs colonnes.

Réponse rapide :

Pour obtenir le nombre de lignes par groupe, appelez simplement .size(), qui renvoie une série :

df.groupby(['col1','col2']).size()

Pour un résultat DataFrame avec des décomptes sous forme de colonne, utilisez :

df.groupby(['col1', 'col2']).size().reset_index(name='counts')

Détaillé Exemple :

Considérez le DataFrame df :

  col1 col2  col3  col4  col5  col6
0    A    B  0.20 -0.61 -0.49  1.49
1    A    B -1.53 -1.01 -0.39  1.82
2    A    B -0.44  0.27  0.72  0.11
3    A    B  0.28 -1.32  0.38  0.18
4    C    D  0.12  0.59  0.81  0.66
5    C    D -0.13 -1.65 -1.64  0.50
6    C    D -1.42 -0.11 -0.18 -0.44
7    E    F -0.00  1.42 -0.26  1.17
8    E    F  0.91 -0.47  1.35 -0.34
9    G    H  1.48 -0.63 -1.14  0.17

Obtenir le nombre de lignes :

df.groupby(['col1', 'col2']).size()

Sortie :

col1  col2
A     B       4
C     D       3
E     F       2
G     H       1
dtype: int64

Créer un DataFrame avec Compte :

df.groupby(['col1', 'col2']).size().reset_index(name='counts')

Sortie :

  col1 col2  counts
0    A    B       4
1    C    D       3
2    E    F       2
3    G    H       1

Y compris les résultats pour plus de statistiques :

Pour calculer des statistiques supplémentaires comme la moyenne, médiane et min, utilisation agg() :

(df
.groupby(['col1', 'col2'])
.agg({
    'col3': ['mean', 'count'],
    'col4': ['median', 'min', 'count']
}))

Sortie :

            col4                  col3      
          median   min count      mean count
col1 col2                                   
A    B    -0.810 -1.32     4 -0.372500     4
C    D    -0.110 -1.65     3 -0.476667     3
E    F     0.475 -0.47     2  0.455000     2
G    H    -0.630 -0.63     1  1.480000     1

Diviser les statistiques en agrégations individuelles :

Pour plus de contrôle sur la sortie, divisez les statistiques et combinez-les en utilisant join:

gb = df.groupby(['col1', 'col2'])
counts = gb.size().to_frame(name='counts')
(counts
 .join(gb.agg({'col3': 'mean'}).rename(columns={'col3': 'col3_mean'}))
 .join(gb.agg({'col4': 'median'}).rename(columns={'col4': 'col4_median'}))
 .join(gb.agg({'col4': 'min'}).rename(columns={'col4': 'col4_min'}))
 .reset_index()
)

Output:

  col1 col2  counts  col3_mean  col4_median  col4_min
0    A    B       4  -0.372500       -0.810     -1.32
1    C    D       3  -0.476667       -0.110     -1.65
2    E    F       2   0.455000        0.475     -0.47
3    G    H       1   1.480000       -0.630     -0.63

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn