Comment créer une dataframe avec plusieurs indices avec pandas en python ?

Published: 21 septembre 2021

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

Exemples de comment créer une dataframe avec plusieurs indices avec pandas en python:

Créer une dataframe avec plusieurs indices à partir d'un tuple

Pour créer une dataframe avec plusieurs indices à partir d'un tuple, une solution est d'utiliser MultiIndex / advanced indexing:

import pandas as pd

tuples = [('Land', 'Liquid'),
          ('Land', 'Ice'),
          ('Ocean', 'Liquid'),
          ('Ocean', 'Ice')]

index = pd.MultiIndex.from_tuples(tuples, names=["Id1", "Id2"])

df = pd.DataFrame({'Count A': [12., 70., 30., 20.], 'Count B': [12., 70., 30., 20.]}, index=index)

print(df)

donne ici

              Count A  Count B
Id1   Id2                     
Land  Liquid     12.0     12.0
      Ice        70.0     70.0
Ocean Liquid     30.0     30.0
      Ice        20.0     20.0

Créer une dataframe avec plusieurs indices en utilisant MultiIndex.from_product()

Un autre moyen plus efficace de créer une base de données avec plusieurs indices consiste à utiliser MultiIndex.from_product)

import pandas as pd

iterables = [["Land", "Ocean"], ["Liquid", "Ice"]]

index = pd.MultiIndex.from_product(iterables, names=["Id1", "Id2"])

df = pd.DataFrame({'Count A': [12., 70., 30., 20.], 'Count B': [12., 70., 30., 20.]}, index=index)

renvoie la même dataframe qu'avant

              Count A  Count B
Id1   Id2                     
Land  Liquid     12.0     12.0
      Ice        70.0     70.0
Ocean Liquid     30.0     30.0
      Ice        20.0     20.0

Obtenir les noms des indices MultiIndex d'une dataframe:

Pour trouver les noms des indices d'une dataframe:

df.index

donne

MultiIndex([( 'Land', 'Liquid'),
            ( 'Land',    'Ice'),
            ('Ocean', 'Liquid'),
            ('Ocean',    'Ice')],
           names=['Id1', 'Id2'])

Obtenir les valeurs d'une ligne d'une dataframe pour un indice donné

Pour obtenir la ligne de la dataframe associée aux indices "Ocean" et "Liquid":

df.loc['Ocean','Liquid']

donne

Count A    30.0
Count B    30.0
Name: (Ocean, Liquid), dtype: float64

Pour obtenir uniquement pour la colonne nommée "Count A":

df['Count A'].loc['Ocean','Liquid']

donne alors

 30.0

Pour obtenir toutes les lignes avec le libellé "Océan"

df.loc['Ocean',:]

donne

        Count A  Count B
Id2                     
Liquid     99.0     30.0
Ice        20.0     20.0

Modifier une valeur dans la dataframe

Pour changer une valeur dans la dataframe, une solution est de faire par exemple

df['Count A'].loc['Ocean','Liquid'] = 99.0

print(df)

donne

              Count A  Count B
Id1   Id2                     
Land  Liquid     12.0     12.0
      Ice        70.0     70.0
Ocean Liquid     99.0     30.0
      Ice        20.0     20.0

Références