Funzione Pandas DataFrame DataFrame.groupby()
- 
          
            Sintassi di pandas.DataFrame.groupby():
- 
          
            Codici di esempio: raggruppa due DataFrame con pandas.DataFrame.groupby()in base ai valori di una singola colonna
- 
          
            Codici di esempio: gruppo di due DataFrame con pandas.DataFrame.groupby()in base a più condizioni
- 
          
            Codici di esempio: imposta as_index=Falseinpandas.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, labelo iterabile per raggruppare elementi | 
| axis | raggruppa per insieme alla riga(axis = 0) o allacolonna(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_StockNoe della colonnaSupplierABC.
- Gruppo con i valori della colonna In_StockNoe della colonnaSupplierXYZ.
- Gruppo con i valori della colonna In_StockYese della colonnaSupplierABC.
- Gruppo con i valori della colonna In_StockYese della colonnaSupplierXYZ.
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.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn