Comment aplatir MultiIndex dans Pandas (avec exemples)
Vous pouvez utiliser la syntaxe de base suivante pour aplatir un MultiIndex dans les pandas :
#flatten all levels of MultiIndex df.reset_index(inplace=True) #flatten specific levels of MultiIndex df.reset_index(inplace=True, level = ['level_name'])
Les exemples suivants montrent comment utiliser cette syntaxe dans la pratique.
Exemple 1 : Aplatir tous les niveaux de MultiIndex dans Pandas
Supposons que nous ayons le DataFrame pandas MultiIndex suivant :
import pandas as pd #create DataFrame index_names = pd.MultiIndex.from_tuples([('Level1','Lev1', 'L1'), ('Level2','Lev2', 'L2'), ('Level3','Lev3', 'L3'), ('Level4','Lev4', 'L4')], names=['Full','Partial', 'ID']) data = {'Store': ['A','B','C','D'], 'Sales': [12, 44, 29, 35]} df = pd.DataFrame(data, columns = ['Store','Sales'], index=index_names) #view DataFrame df Store Sales Full Partial ID Level1 Lev1 L1 A 17 Level2 Lev2 L2 B 22 Level3 Lev3 L3 C 29 Level4 Lev4 L4 D 35
Nous pouvons utiliser la syntaxe suivante pour aplatir chaque niveau du MultiIndex en colonnes du DataFrame :
#flatten every level of MultiIndex df.reset_index(inplace=True) #view updated DataFrame df Full Partial ID Store Sales 0 Level1 Lev1 L1 A 12 1 Level2 Lev2 L2 B 44 2 Level3 Lev3 L3 C 29 3 Level4 Lev4 L4 D 35
Notez que chaque niveau du MultiIndex est désormais une colonne dans le DataFrame.
Exemple 2 : Aplatir des niveaux spécifiques de MultiIndex dans Pandas
Supposons que nous ayons le même DataFrame pandas que l’exemple précédent :
#view DataFrame df Store Sales Full Partial ID Level1 Lev1 L1 A 12 Level2 Lev2 L2 B 44 Level3 Lev3 L3 C 29 Level4 Lev4 L4 D 35
Le code suivant montre comment aplatir un seul niveau spécifique du MultiIndex :
#flatten 'ID' level only
df.reset_index(inplace=True, level = ['ID'])
#view updated DataFrame
df
ID Store Sales
Full Partial
Level1 Lev1 L1 A 12
Level2 Lev2 L2 B 44
Level3 Lev3 L3 C 29
Level4 Lev4 L4 D 35
Et le code suivant montre comment aplatir plusieurs niveaux spécifiques du MultiIndex :
#flatten 'ID' level only
df.reset_index(inplace=True, level = ['Partial', 'ID'])
#view updated DataFrame
df
Partial ID Store Sales
Full
Level1 Lev1 L1 A 12
Level2 Lev2 L2 B 44
Level3 Lev3 L3 C 29
Level4 Lev4 L4 D 35
Ressources additionnelles
Les didacticiels suivants expliquent comment exécuter d’autres fonctions courantes dans les pandas :
Comment convertir un index en colonne dans Pandas
Comment renommer l’index dans Pandas
Comment définir la colonne comme index dans Pandas