Funzione Pandas DataFrame DataFrame.groupby()

Suraj Joshi 30 gennaio 2023
  1. Sintassi di pandas.DataFrame.groupby():
  2. Codici di esempio: raggruppa due DataFrame con pandas.DataFrame.groupby() in base ai valori di una singola colonna
  3. Codici di esempio: gruppo di due DataFrame con pandas.DataFrame.groupby() in base a più condizioni
  4. Codici di esempio: imposta as_index=False in pandas.DataFrame.groupby()
Funzione Pandas DataFrame DataFrame.groupby()

pandas.DataFrame.groupby() divide il DataFrame in gruppi in base ai criteri dati. Possiamo facilmente manipolare grandi set di dati usando il metodo groupby().

Sintassi di 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)

Parametri

by mappatura, funzione, stringa, label o iterabile per raggruppare elementi
axis raggruppa per insieme alla riga (axis = 0) o alla colonna (axis = 1)
level Numero intero. valore per raggruppare in base a uno o più livelli particolari
as_index Booleano. Restituisce un oggetto con etichette di gruppo come indice
sort Booleano. Ordina le chiavi di gruppo
group_keys Booleano. Aggiunge chiavi di gruppo all’indice per identificare i pezzi
squeeze Booleano. Diminuisce la dimensione del rendimento quando possibile
observed Booleano. Applicare solo se uno qualsiasi dei raggruppatori è categoriale e mostra solo i valori osservati per i raggruppatori categoriali se impostato su True.

Ritorno

Restituisce un oggetto DataFrameGroupBy contenente le informazioni raggruppate.

Codici di esempio: raggruppa due DataFrame con pandas.DataFrame.groupby() in base ai valori di una singola colonna

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))

Produzione:

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

Raggruppa il DataFrame in gruppi basati sui valori nella colonna In_Stock e restituisce un oggetto DataFrameGroupBy.

Per ottenere dettagli sull’oggetto DataFrameGroupBy restituito da groupby(), possiamo usare il metodo first() dell’oggetto DataFrameGroupBy per ottenere il primo elemento di ogni gruppo.

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())

Produzione:

            Name  Price
In_Stock               
No         Mango     24
Yes       Orange     34

Stampa il DataFrame formato dai primi elementi di entrambi i gruppi divisi da df.

Possiamo anche stampare l’intero gruppo usando il metodo 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'))

Produzione:

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

Stampa tutti gli elementi in df il cui valore nella colonna In_Stock è Yes. Per prima cosa raggruppiamo elementi con valori diversi della colonna In_Stock in gruppi separati usando il metodo groubpy() e poi accediamo a un gruppo particolare usando il metodo get_group().

Codici di esempio: gruppo di due DataFrame con pandas.DataFrame.groupby() in base a più condizioni

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())

Produzione:

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

Raggruppa il df in gruppi in base ai loro valori nelle colonne In_Stock e Supplier e restituisce un oggetto DataFrameGroupBy.

Usiamo il metodo first() per ottenere il primo elemento di ogni gruppo. Restituisce un DataFrame formato dalla combinazione dei primi elementi dei seguenti quattro gruppi:

  • Gruppo con i valori della colonna In_Stock No e della colonna Supplier ABC.
  • Gruppo con i valori della colonna In_Stock No e della colonna Supplier XYZ.
  • Gruppo con i valori della colonna In_Stock Yes e della colonna Supplier ABC.
  • Gruppo con i valori della colonna In_Stock Yes e della colonna Supplier XYZ.

Il DataFrame restituito dai metodi dell’oggetto GroupBy ha un MultiIndex, quando passiamo più etichette alla funzione groupby().

print(grouped_df.first().index)

Produzione:

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

Codici di esempio: imposta as_index=False in pandas.DataFrame.groupby()

Il parametro as_index nel metodo DataFrame.groupby() è True per impostazione predefinita. L’etichetta del gruppo è l’indice del DataFrame restituito quando si applicano metodi GroupBy come 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)

Produzione:

            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')

Come puoi vedere, l’indice del DataFrame generato è l’etichetta del gruppo a causa di as_index=True per impostazione predefinita.

L’indice diventa un indice generato automaticamente in numeri quando impostiamo as_index=False.

Autore: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Articolo correlato - Pandas DataFrame