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, 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_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