Pandas : comment regrouper par index et effectuer un calcul
Vous pouvez utiliser les méthodes suivantes pour regrouper par une ou plusieurs colonnes d’index dans les pandas et effectuer des calculs :
Méthode 1 : regrouper par une colonne d’index
df.groupby('index1')['numeric_column'].max()
Méthode 2 : regrouper par plusieurs colonnes d’index
df.groupby(['index1', 'index2'])['numeric_column'].sum()
Méthode 3 : regrouper par colonne d’index et colonne régulière
df.groupby(['index1', 'numeric_column1'])['numeric_column2'].nunique()
Les exemples suivants montrent comment utiliser chaque méthode avec le DataFrame pandas suivant qui possède un MultiIndex :
import pandas as pd
#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
'position': ['G', 'G', 'G', 'F', 'F', 'G', 'G', 'F', 'F', 'F'],
'points': [7, 7, 7, 19, 16, 9, 10, 10, 8, 8],
'rebounds': [8, 8, 8, 10, 11, 12, 13, 13, 15, 11]})
#set 'team' column to be index column
df.set_index(['team', 'position'], inplace=True)
#view DataFrame
df
points rebounds
team position
A G 7 8
G 7 8
G 7 8
F 19 10
F 16 11
B G 9 12
G 10 13
F 10 13
F 8 15
F 8 11
Méthode 1 : regrouper par une colonne d’index
Le code suivant montre comment trouver la valeur maximale de la colonne « points », regroupée par la colonne d’index « position » :
#find max value of 'points' grouped by 'position index column
df.groupby('position')['points'].max()
position
F 19
G 10
Name: points, dtype: int64
Méthode 2 : regrouper par plusieurs colonnes d’index
Le code suivant montre comment trouver la somme de la colonne « points », regroupée par les colonnes d’index « équipe » et « position » :
#find max value of 'points' grouped by 'position index column
df.groupby(['team', 'position'])['points'].sum()
team position
A F 35
G 21
B F 26
G 19
Name: points, dtype: int64
Méthode 3 : regrouper par colonne d’index et colonne régulière
Le code suivant montre comment trouver le nombre de valeurs uniques dans la colonne « rebonds », regroupées par la colonne d’index « équipe » et la colonne ordinaire « points » :
#find max value of 'points' grouped by 'position index column
df.groupby(['team', 'points'])['rebounds'].nunique()
team points
A 7 1
16 1
19 1
B 8 2
9 1
10 1
Name: rebounds, dtype: int64
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :
Comment compter les valeurs uniques chez les pandas
Comment aplatir MultiIndex dans Pandas
Comment modifier une ou plusieurs valeurs d’index dans Pandas
Comment réinitialiser un index dans Pandas