Pandas: uma fórmula simples para “agrupamento por ativos”


Você pode usar a seguinte sintaxe básica para executar o equivalente a uma instrução SQL “GROUP BY HAVING” no pandas:

 df. groupby (' some_column '). filter ( lambda x: some condition)

Os exemplos a seguir mostram como usar essa sintaxe na prática com o seguinte DataFrame do pandas:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C'],
                   ' position ': ['G', 'F', 'F', 'G', 'F', 'F', 'G', 'G'],
                   ' points ': [30, 22, 19, 14, 14, 11, 20, 28]})

#view DataFrame
print (df)

  team position points
0 AG 30
1 AF 22
2 FY 19
3 BG 14
4 BF 14
5 BF 11
6 GC 20
7 GC 28

Exemplo 1: Grupo de pandas com Contagem

O código a seguir mostra como agrupar linhas com base no valor da coluna Equipe e depois filtrar somente equipes cuja contagem seja maior que 2:

 #group by team and filter for teams with count > 2
df. groupby (' team '). filter ( lambda x: len (x) > 2 )


        team position points
0 A G 30
1 A F 22
2 A F 19
3 B G 14
4 B F 14
5 B F 11

Observe que apenas as linhas com valor de equipe “A” ou “B” são retornadas, pois ambas são equipes cujo número é maior que 2.

Exemplo 2: Grupo de pandas com média

O código a seguir mostra como agrupar linhas com base no valor da coluna Equipe e depois filtrar apenas as equipes cujo valor médio de pontos é maior que 20:

 #group by team and filter for teams with mean points > 20
df. groupby (' team '). filter ( lambda x: x[' points ']. mean () > 20 )

        team position points
0 A G 30
1 A F 22
2 A F 19
6 C G 20
7 C G 28

Observe que apenas as linhas com um valor de equipe “A” ou “C” são retornadas, pois essas são as duas equipes que têm um valor médio de pontos superior a 20.

Exemplo 3: Grupo de pandas com soma

O código a seguir mostra como agrupar linhas por valor na coluna Equipe e depois filtrar apenas equipes cuja soma de pontos seja exatamente 48:

 #group by team and filter for teams with sum of points equal to 48
df. groupby (' team '). filter ( lambda x: x[' points ']. sum () == 48 )

        team position points
6 C G 20
7 C G 28

Observe que apenas as linhas com valor de equipe “C” são retornadas, pois esta é a única equipe que possui uma soma de pontos igual a 48.

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras operações comuns em pandas:

Pandas: obtém o índice de linhas cuja coluna corresponde ao valor
Pandas: como selecionar colunas contendo uma string específica
Pandas: como verificar se a coluna contém uma string

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *