Como aplicar uma função ao pandas groupby


Você pode usar a seguinte sintaxe básica para usar as funções groupby() e apply() juntas em um DataFrame do pandas:

 df. groupby (' var1 '). apply ( lambda x: some function)

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', 'B'],
                   ' points_for ': [18, 22, 19, 14, 11, 20, 28],
                   ' points_against ': [14, 21, 19, 14, 12, 20, 21]})

#view DataFrame
print (df)

  team points_for points_against
0 to 18 14
1 To 22 21
2 A 19 19
3 B 14 14
4 B 11 12
5 B 20 20
6 B 28 21

Exemplo 1: Use groupby() e apply() para encontrar frequências relativas

O código a seguir mostra como usar as funções groupby( ) e apply() para encontrar as frequências relativas de cada nome de equipe no DataFrame do pandas:

 #find relative frequency of each team name in DataFrame
df. groupby (' team '). apply ( lambda x:x[' team ']. count ()/ df.shape [0])

team
A 0.428571
B 0.571429
dtype:float64

Pelo resultado, podemos perceber que a equipe A aparece em 42,85% de todas as linhas e a equipe B aparece em 57,14% de todas as linhas.

Exemplo 2: Use groupby() e apply() para encontrar valores máximos

O código a seguir mostra como usar as funções groupby( ) e apply() para encontrar os valores máximos de “points_for” para cada equipe:

 #find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x:x[' points_for ']. max ())

team
At 22
B28
dtype: int64

Pelo resultado, podemos perceber que o máximo de pontos marcados pela equipe A é 22 e o máximo de pontos marcados pela equipe B é 28.

Exemplo 3: Use groupby() e apply() para realizar um cálculo personalizado

O código a seguir mostra como usar as funções groupby( ) e apply() para encontrar a diferença média entre “points_for” e “points_against” para cada equipe:

 #find max "points_for" values for each team
df. groupby (' team '). apply ( lambda x: (x[' points_for '] - x[' points_against ']). mean ())

team
A 1.666667
B 1.500000
dtype:float64

Pelos resultados, podemos perceber que a diferença média entre “pontos a favor” e “pontos contra” é de 1,67 para a equipe A e de 1,50 para a equipe B.

Recursos adicionais

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

Como realizar uma soma GroupBy no Pandas
Como usar Groupby e Plot no Pandas
Como contar valores únicos usando GroupBy no Pandas

Add a Comment

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