Pandas DataFrame DataFrame.groupby() Fonction

Suraj Joshi 30 janvier 2023
  1. Syntaxe de pandas.DataFrame.groupby():
  2. Exemples de codes: regrouper deux DataFrames avec pandas.DataFrame.groupby() en fonction des valeurs d’une seule colonne
  3. Exemples de codes: regrouper deux DataFrames avec pandas.DataFrame.groupby() en fonction de plusieurs conditions
  4. Exemples de codes: définissez as_index=False dans pandas.DataFrame.groupby()
Pandas DataFrame DataFrame.groupby() Fonction

pandas.DataFrame.groupby() prend un DataFrame comme entrée divise le DataFrame en groupes sur la base de critères donnés. Nous pouvons facilement manipuler de grands ensembles de données en utilisant la méthode groupby().

Syntaxe de pandas.DataFrame.groupby():

DataFrame.groupby(
    by=None,
    axis=0,
    level=None,
    as_index=True,
    sort=True,
    group_keys=True,
    squeeze: bool=False,
    observed: bool=False)

Paramètres

by mappage, fonction, chaîne, label ou itérable pour grouper des éléments
axis regrouper avec la ligne (axis = 0) ou la colonne (axis = 1)
level Entier. valeur à regrouper par niveau ou niveaux particuliers
as_index Booléen. Il retourne un objet avec des étiquettes de groupe comme index
sort Booléen. Il trie les clés de groupe
group_keys Booléen. Il ajoute des clés de groupe à indexer pour identifier les pièces
squeeze Booléen. Il diminue la dimension du retour lorsque cela est possible
observed Booléen. S’applique uniquement si l’un des groupeurs est catégorique et n’affiche les valeurs observées pour les groupeurs catégoriques que s’il est défini sur True.

Revenir

Il retourne un objet DataFrameGroupBy contenant les informations regroupées.

Exemples de codes: regrouper deux DataFrames avec pandas.DataFrame.groupby() en fonction des valeurs d’une seule colonne

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df)
print(type(grouped_df))

Production:

<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f73cc992d30>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>

Il regroupe le DataFrame en groupes en fonction des valeurs de la colonne In_Stock et retourne un objet DataFrameGroupBy.

Pour obtenir des détails sur l’objet DataFrameGroupBy renvoyé par groupby() , nous pouvons utiliser la méthode first() de l’objet DataFrameGroupBy pour obtenir le premier élément de chaque groupe.

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df.first())

Production:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34

Il imprime le DataFrame formé par les premiers éléments des deux groupes séparés de df.

Nous pouvons également imprimer le groupe entier en utilisant la méthode get_group().

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ) ,
             ('Mango', 24, 'No' ) ,
             ('banana', 14, 'No' ) ,
             ('Apple', 44, 'Yes' ) ,
             ('Pineapple', 64, 'No') ,
             ('Kiwi', 84, 'Yes')  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock']) 
grouped_df = df.groupby('In_Stock')
print(grouped_df.get_group('Yes'))

Production:

     Name  Price In_Stock
0  Orange     34      Yes
3   Apple     44      Yes
5    Kiwi     84      Yes

Il imprime tous les éléments dans df dont la valeur dans la colonne In_Stock est Yes. Nous groupons d’abord les éléments avec différentes valeurs de la colonne In_Stock dans des groupes séparés en utilisant la méthode groubpy() puis accédons à un groupe particulier en utilisant la méthode get_group().

Exemples de codes: regrouper deux DataFrames avec pandas.DataFrame.groupby() en fonction de plusieurs conditions

import pandas as pd
fruit_list = [ ('Orange', 34, 'Yes' ,'ABC') ,
             ('Mango', 24, 'No','ABC' ) ,
             ('banana', 14, 'No','ABC' ) ,
             ('Apple', 44, 'Yes',"XYZ" ) ,
             ('Pineapple', 64, 'No',"XYZ") ,
             ('Kiwi', 84, 'Yes',"XYZ")  ]

df = pd.DataFrame(fruit_list, columns = ['Name' , 'Price', 'In_Stock',"Supplier"]) 
grouped_df = df.groupby(['In_Stock', 'Supplier']) 
  
print(grouped_df.first())

Production:

                        Name  Price
In_Stock Supplier                  
No       ABC           Mango     24
         XYZ       Pineapple     64
Yes      ABC          Orange     34
         XYZ           Apple     44

Il regroupe le df en groupes en fonction de leurs valeurs dans les colonnes In_Stock et Supplier et retourne un objet DataFrameGroupBy.

Nous utilisons la méthode first() pour obtenir le premier élément de chaque groupe. Il retourne un DataFrame formé par la combinaison des premiers éléments des quatre groupes suivants:

  • Groupe avec les valeurs de la colonne In_Stock No et de la colonne Supplier ABC.
  • Groupe avec des valeurs de la colonne In_Stock Non et de la colonne Supplier XYZ.
  • Groupe avec les valeurs de la colonne In_Stock Oui et de la colonne Supplier ABC.
  • Groupe avec des valeurs de la colonne In_Stock Oui et de la colonne Fournisseur XYZ.

Le DataFrame retourné par les méthodes de l’objet GroupBy a un MultiIndex, lorsque nous passons plusieurs étiquettes à la fonction groupby().

print(grouped_df.first().index)

Production:

MultiIndex(levels=[['No', 'Yes'], ['ABC', 'XYZ']],
           labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=['In_Stock', 'Supplier'])

Exemples de codes: définissez as_index=False dans pandas.DataFrame.groupby()

Le paramètre as_index dans la méthode DataFrame.groupby() est True par défaut. L’étiquette de groupe est l’index du DataFrame retourné lors de l’application des méthodes GroupBy comme first().

import pandas as pd

fruit_list = [
    ("Orange", 34, "Yes"),
    ("Mango", 24, "No"),
    ("banana", 14, "No"),
    ("Apple", 44, "Yes"),
    ("Pineapple", 64, "No"),
    ("Kiwi", 84, "Yes"),
]

df = pd.DataFrame(fruit_list, columns=["Name", "Price", "In_Stock"])

grouped_df = df.groupby("In_Stock", as_index=True)

firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)

print("---------")

grouped_df = df.groupby("In_Stock", as_index=False)

firtGroup = grouped_df.first()
print(firtGroup)
print(firtGroup.index)

Production:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34
Index(['No', 'Yes'], dtype='object', name='In_Stock')
---------
  In_Stock    Name  Price
0       No   Mango     24
1      Yes  Orange     34
Int64Index([0, 1], dtype='int64')

Comme vous pouvez le voir, l’index du DataFrame généré est les étiquettes de groupe par défaut, qui est as_index = True.

L’index devient automatiquement un index généré en nombre lorsque nous définissons as_index = False.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Pandas DataFrame