Comment décomposer (diviser) une dataframe en fonction des valeurs d'une colonne donnée avec pandas en python ?

Published: 07 avril 2021

Tags: Python; Pandas; DataFrame;

DMCA.com Protection Status

Exemple de comment décomposer (diviser) une dataframe en fonction des valeurs d'une colonne donnée avec pandas en python

Créer une dataframe avec pandas

Créons d'abord une dataframe

import pandas as pd
import random

l1 = [random.randint(1,100) for i in range(15)]
l2 = [random.randint(1,100) for i in range(15)]
l3 = [random.randint(2018,2020) for i in range(15)]

data = {'Column A':l1,'Column B':l2,'Year':l3}

df = pd.DataFrame(data)

print(df)

donne

    Column A  Column B  Year
0         63         9  2018
1         97        29  2018
2          1        92  2019
3         75        38  2020
4         19        50  2019
5         20        71  2019
6         59        60  2020
7         93        46  2019
8          6        17  2020
9         87        82  2018
10        36        12  2020
11        89        71  2018
12        87        69  2019
13        98        21  2018
14        82        67  2020

Nous voulons découper cette dataframe en fonction de la colonne "year".

Rechercher des valeurs uniques dans une colonne donnée

Pour trouver les valeurs uniques dans une colonne donnée

df['Year'].unique()

donne ici:

array([2018, 2019, 2020])

Extraire les lignes pour une valeur donnée dans une colonne

Pour extraire les lignes pour une valeur donnee dans une colonne

df[  df['Year'] == 2018 ]

donne

    Column A  Column B  Year
0         63         9  2018
1         97        29  2018
9         87        82  2018
11        89        71  2018
13        98        21  2018

Décomposer une dataframe en fonction des valeurs d'une colonne

Maintenant, nous pouvons découper le dataframe d'origine et utiliser un dictionnaire pour stocker les résultats:

df_sliced_dict = {}

for year in df['Year'].unique():

    df_sliced_dict[year] = df[  df['Year'] == year ]

alors

import pprint

pp = pprint.PrettyPrinter(indent=4)

pp.pprint(df_sliced_dict)

donne

{   2018:     Column A  Column B  Year
0         63         9  2018
1         97        29  2018
9         87        82  2018
11        89        71  2018
13        98        21  2018,
    2019:     Column A  Column B  Year
2          1        92  2019
4         19        50  2019
5         20        71  2019
7         93        46  2019
12        87        69  2019,
    2020:     Column A  Column B  Year
3         75        38  2020
6         59        60  2020
8          6        17  2020
10        36        12  2020
14        82        67  2020}

Pour obtenir la dataframe pour une année donnée à partir du dictionnaire:

df_sliced_dict[2018]

donne

    Column A  Column B  Year
0         63         9  2018
1         97        29  2018
9         87        82  2018
11        89        71  2018
13        98        21  2018

Références