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=False
enpandas.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_Stock
No
y la columnaSupplier
ABC
. - Grupo con valores de la columna
In_Stock
No
y la columnaSupplier
XYZ
. - Agrupa los valores de la columna
In_Stock
Yes
y la columnaSupplier
ABC
. - Agrupa los valores de la columna
In_Stock
Yes
y la columnaSupplier
XYZ
.
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