Pandas DataFrame DataFrame.groupby() Função
-
Sintaxe de
pandas.DataFrame.groupby(): -
Códigos de exemplo: Grupo dois DataFrames com
pandas.DataFrame.groupby()com base em valores de coluna única -
Códigos de exemplo: Group Two DataFrames With
pandas.DataFrame.groupby()Based on Multiple Conditions -
Códigos de exemplo: Definir
as_index=Falseempandas.DataFrame.groupby()
A função pandas.DataFrame.groupby() divide o DataFrame em grupos com base em alguns critérios. Podemos facilmente manipular grandes conjuntos de dados utilizando o método grupo-por().
Sintaxe 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 |
mapeamento, função, string, label ou iterável para agrupar elementos |
axis |
agrupar junto com a linha (axis=0) ou coluna (axis=1) |
level |
Valor inteiro para agrupar por um determinado nível ou níveis |
as_index |
Booleano. Ele retorna um objeto com etiquetas de grupo como o índice |
sort |
Booleano. Classifica as chaves do grupo |
group_keys |
Booleano. Adiciona chaves de grupo para indexar para identificar as peças |
squeeze |
Booleano. Diminui a dimensão do retorno quando possível |
observed |
Booleano. Aplicar somente se qualquer uma das garoupas for categórica e só mostrar valores observados para as garoupas categóricas se estiver definida como True. |
Retornar
Ele retorna um objeto DataFrameGroupBy que contém as informações agrupadas.
Códigos de exemplo: Grupo dois DataFrames com pandas.DataFrame.groupby() com base em valores de coluna única
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'>
Ela agrupa o DataFrame em grupos baseados nos valores da coluna In_Stock e retorna um objeto DataFrameGroupBy.
Para obter detalhes sobre o objeto DataFrameGroupBy retornado por groupby(), podemos utilizar o método first() do objeto DataFrameGroupBy para obter o primeiro 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 o DataFrame formado pelos primeiros elementos de ambos os grupos divididos por df.
Também podemos imprimir o grupo inteiro utilizando o 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 os elementos no df cujo valor na coluna In_Stock é Yes. Primeiro agrupamos elementos com valores diferentes da coluna In_Stock em grupos separados utilizando o método groubpy() e depois acessamos um grupo particular utilizando o método get_group().
Códigos de exemplo: Group Two DataFrames With pandas.DataFrame.groupby() Based on Multiple Conditions
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
Ela agrupa o df em grupos baseados em seus valores nas colunas In_Stock e Supplier e retorna um objeto DataFrameGroupBy.
Utilizamos o método first() para obter o primeiro elemento de cada grupo. Ele retorna um DataFrameFrame formado pela combinação dos primeiros elementos dos quatro grupos seguintes:
- Grupo com valores da coluna
In_StockNoeSuppliercolunaABC. - Grupo com valores da coluna
In_StockNoe da colunaSupplierXYZ. - Grupo com valores da coluna
In_StockYese colunaSuppliercolunaABC. - Grupo com valores da coluna
In_StockYese colunaSupplierXYZ.
O DataFrame retornado pelos métodos do objeto GroupBy tem um MultiIndex, quando passamos múltiplos rótulos para a função 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 exemplo: Definir as_index=False em pandas.DataFrame.groupby()
O parâmetro as_index em DataFrame.groupby() método é True por padrão. A etiqueta do grupo é o índice do DataFrame retornado ao aplicar 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 você pode ver, o índice do DataFrame gerado é a etiqueta do grupo por causa de as_index=True por padrão.
O índice torna-se índice gerado automaticamente em números quando definimos as_index=False.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn