Pandas : Comment diviser un DataFrame par valeur de colonne



Vous pouvez utiliser la syntaxe de base suivante pour diviser un DataFrame pandas par valeur de colonne :

#define value to split on
x = 20

#define df1 as DataFrame where 'column_name' is >= 20
df1 = df[df['column_name'] >= x]

#define df2 as DataFrame where 'column_name' is < 20
df2 = df[df['column_name'] < x]

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : diviser le DataFrame Pandas par valeur de colonne

Supposons que nous ayons le DataFrame pandas suivant :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   'points': [22, 24, 19, 18, 14, 29, 31, 16],
                   'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print(df)

        team	points	rebounds
0	A	22	11
1	B	24	8
2	C	19	10
3	D	18	6
4	E	14	6
5	F	29	5
6	G	31	9
7	H	16	12

Nous pouvons utiliser le code suivant pour diviser le DataFrame en deux DataFrames où le premier contient les lignes où les « points » sont supérieurs ou égaux à 20 et le second contient les lignes où les « points » sont inférieurs à 20 :

#define value to split on
x = 20

#define df1 as DataFrame where 'points' is >= 20
df1 = df[df['points'] >= x]

print(df1)

  team  points  rebounds
0    A      22        11
1    B      24         8
5    F      29         5
6    G      31         9

#define df2 as DataFrame where 'points' is < 20
df2 = df[df['points'] < x]

print(df2)

  team  points  rebounds
2    C      19        10
3    D      18         6
4    E      14         6
7    H      16        12

Notez que nous pouvons également utiliser la fonction reset_index() pour réinitialiser les valeurs d’index pour chaque DataFrame résultant :

#define value to split on
x = 20

#define df1 as DataFrame where 'points' is >= 20
df1 = df[df['points'] >= x].reset_index(drop=True)

print(df1)

  team  points  rebounds
0    A      22        11
1    B      24         8
2    F      29         5
3    G      31         9

#define df2 as DataFrame where 'points' is < 20
df2 = df[df['points'] < x].reset_index(drop=True)

print(df2)

  team  points  rebounds
0    C      19        10
1    D      18         6
2    E      14         6
3    H      16        12

Notez que l’index de chaque DataFrame résultant commence désormais à 0.

Ressources additionnelles

Les didacticiels suivants expliquent comment corriger d’autres erreurs courantes en Python :

Comment réparer KeyError dans Pandas
Comment réparer : ValueError : impossible de convertir le float NaN en entier
Comment réparer : ValueError : les opérandes n’ont pas pu être diffusés avec les formes

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *