Skip to content

Anderson Berg

Pandas Groupby

February 01, 2021

Diversas vezes quando você vai fazer análise de um conjunto grande de dados é preciso agregar esses dados para que eles façam mais sentido e possam ser mais facilmente analisados.

Sempre que tenho a necessidade de organizar dados eu recorro ao groupby do Pandas.

O método groupby não só faz uma agregação dos dados, mas também te dá a possibilidade de extrair umas estatísticas bem interessantes.

Vamos dar uma olhada nesses dados de títulos na Netflix:

>>> import pandas as pd
>>> df = pd.read_csv("netflix_titles.csv")
>>> colunas = ['title', 'country', 'release_year']
>>> titulos = df.filter(items=colunas)
>>> titulos.head(10)
title country release_year
0 3% Brazil 2020
1 7:19 Mexico 2016
2 23:59 Singapore 2011
3 9 United States 2009
4 21 United States 2008
5 46 Turkey 2016
6 122 Egypt 2019
7 187 United States 1997
8 706 India 2019
9 1920 India 2008

Será que dá pra saber quantos títulos de cada país existem?

Pra isso eu preciso contar quantas vezes o nome de um país aparece nessa tabela. É aqui que o groupby começa a ser útil.

Eu quero então agrupar as linhas de acordo com a coluna “country”. Quando o método groupby é executado, ele cria um objeto também chamado Groupby, que possui diversos outros métodos.

Nesse exemplo, vou usar o count() pra fazer a contagem de vezes que um país aparece na tabela. Além disso, quero que a agregação seja feita na coluna “title”. Então o código fica assim:

>>> titulos.groupby(['country'])['title'].count()
country
Argentina 50
Argentina, Brazil, France, Poland, Germany, Denmark 1
Argentina, Chile 1
Argentina, Chile, Peru 1
Argentina, France 1
..
Venezuela 1
Venezuela, Colombia 1
Vietnam 5
West Germany 1
Zimbabwe 1
Name: title, Length: 681, dtype: int64

A visualização ainda não está perfeita, mas já dá pra perceber que houve uma contagem de títulos por país.

Quero agora melhorar a visualização e ordenar pelo país com mais títulos primeiro:

>>> grouped_titulos = titulos.groupby(['country'])['title'].count().reset_index()
>>> grouped_titulos.sort_values('title', ascending=False).head(10)
country title
549 United States 2555
229 India 923
462 United Kingdom 397
291 Japan 226
394 South Korea 183
51 Canada 177
403 Spain 134
147 France 115
137 Egypt 101
308 Mexico 100

O groupby também aceita o agrupamento por mais de uma coluna. Vamos supor que eu quero saber quantos títulos foram lançados em cada ano, pelo mesmo país:

>>> group_titulos = titulos.groupby(['country', 'release_year']).count().reset_index()
>>> group_titulos.sort_values('title', ascending=False).head()
country release_year title
1330 United States 2019 359
1328 United States 2017 351
1329 United States 2018 348
1331 United States 2020 332
1327 United States 2016 254

O objetivo aqui era dar uma breve introdução ao groupby e um pouco do que pode ser feito com essa função.

Existem outras funções do objeto Groupby bastante úteis também e que podem ser encontradas na documentação do Pandas.

No futuro, em outro post posso detalhar melhor essas outras funções aplicadas a conjuntos de dados diferentes.


Desenvolvedor Python