Pandas DataFrame DataFrame.groupby() Función
-
La sintaxis de
pandas.DataFrame.groupby(): -
Códigos de ejemplo: Agrupa dos DataFrames con
pandas.DataFrame.groupby()basado en valores de una sola columna -
Códigos de ejemplo: Agrupar dos DataFrames con
pandas.DataFrame.groupby()basado en múltiples condiciones -
Códigos de ejemplo: Ponga
as_index=Falseenpandas.DataFrame.groupby()
pandas.DataFrame.groupby() divide el DataFrame en grupos basados en el criterio dado. Podemos manipular fácilmente grandes conjuntos de datos usando el método groupby().
La sintaxis 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)
Parámetros
by |
mapeo, función, cadena, label o iterable para agrupar elementos |
axis |
agruparse junto con la fila (axis=0) o la fila (axis=1) |
level |
Entero. valor para agrupar por un nivel o niveles particulares |
as_index |
Booleana. Devuelve un objeto con etiquetas de grupo como índice |
sort |
Booleana. Ordena las claves de grupo |
group_keys |
Booleana. Añade claves de grupo a los índices para identificar las piezas |
squeeze |
Booleana. Disminuye la dimensión del retorno cuando es posible |
observed |
Booleana. Sólo se aplica si alguno de los meros es categórico y sólo muestra valores observados para meros categóricos si se establece en True. |
Retorna
Devuelve un objeto DataFrameGroupBy que contiene la información agrupada.
Códigos de ejemplo: Agrupa dos DataFrames con pandas.DataFrame.groupby() basado en valores de una sola columna
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))
Resultado:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f73cc992d30>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
Agrupa el DataFrame en grupos basados en los valores de la columna In_Stock y devuelve un DataFrameGroupBy.
Para obtener detalles sobre el objeto DataFrameGroupBy devuelto por groupby(), podemos usar el método first() del objeto DataFrameGroupBy para obtener el primer elemento de cada grupo.
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())
Resultado:
Name Price
In_Stock
No Mango 24
Yes Orange 34
Imprime el DataFrame formado por los primeros elementos de ambos grupos separados de df.
También podemos imprimir el grupo entero usando el método 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'))
Resultado:
Name Price In_Stock
0 Orange 34 Yes
3 Apple 44 Yes
5 Kiwi 84 Yes
Imprime todos los elementos en df cuyo valor en la columna In_Stock es Yes. Primero agrupamos los elementos con diferentes valores de la columna In_Stock en grupos separados usando el método groubpy() y luego accedemos a un grupo particular usando el método get_group().
Códigos de ejemplo: Agrupar dos DataFrames con pandas.DataFrame.groupby() basado en múltiples condiciones
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())
Resultado:
Name Price
In_Stock Supplier
No ABC Mango 24
XYZ Pineapple 64
Yes ABC Orange 34
XYZ Apple 44
Agrupa el df en grupos basados en sus valores en las columnas In_Stock y Supplier y devuelve un DatosFrameGroupBy.
Usamos el método first() para obtener el primer elemento de cada grupo. Devuelve un DataFrame formado por la combinación de los primeros elementos de los cuatro grupos siguientes:
- Grupo con los valores de la columna
In_StockNoy la columnaSupplierABC. - Grupo con valores de la columna
In_StockNoy la columnaSupplierXYZ. - Agrupa los valores de la columna
In_StockYesy la columnaSupplierABC. - Agrupa los valores de la columna
In_StockYesy la columnaSupplierXYZ.
El DataFrame devuelto por los métodos del objeto GroupBy tiene un MultiIndex, cuando le pasamos varias etiquetas a la función groupby().
print(grouped_df.first().index)
Resultado:
MultiIndex(levels=[['No', 'Yes'], ['ABC', 'XYZ']],
labels=[[0, 0, 1, 1], [0, 1, 0, 1]],
names=['In_Stock', 'Supplier'])
Códigos de ejemplo: Ponga as_index=False en pandas.DataFrame.groupby()
El parámetro as_index en el método DataFrame.groupby() es True por defecto. La etiqueta de grupo es el índice del DataFrame devuelto cuando se aplican los métodos GroupBy como 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)
Resultado:
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')
Como puedes ver, el índice del DataFrame generado es la etiqueta de grupo debido a as_index=True por defecto.
El índice se convierte en un índice generado automáticamente en números cuando establecemos as_index=False.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn