Como calcular o deslocamento por grupo no pandas


Você pode usar os seguintes métodos para calcular valores deslocados de grupo em um DataFrame do pandas:

Método 1: Calcular o deslocamento por um grupo

 df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )

Método 2: calcular o deslocamento por vários grupos

 df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )

Observe que o valor da função shift() indica o número de valores para os quais calcular o deslocamento.

Os exemplos a seguir mostram como usar cada método na prática.

Exemplo 1: Calcular o deslocamento por um grupo

Digamos que temos o seguinte DataFrame do pandas que mostra as vendas realizadas por duas lojas em dias consecutivos:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  blind sales
0 to 18
1 to 10
2 to 14
3 to 13
4 B 19
5 B 24
6 B 25
7 B 29

Podemos usar a seguinte sintaxe para criar uma coluna de compensação que exiba as vendas do dia anterior para cada loja:

 #add column that displays lag of sales column by store
df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store sales lagged_sales
0 to 18 NaN
1 to 10 18.0
2 A 14 10.0
3 A 13 14.0
4 B 19 NaN
5 B 24 19.0
6 B 25 24.0
7 B 29 25.0

Veja como interpretar o resultado:

  • O primeiro valor na coluna de deslocamento é NaN , pois não há valor anterior na coluna de vendas da loja A.
  • O segundo valor na coluna de deslocamento é 18 , pois é o valor anterior na coluna de vendas da loja A.

E assim por diante.

Exemplo 2: Calcular deslocamento por vários grupos

Suponha que temos o seguinte DataFrame do pandas que mostra as vendas realizadas por funcionários de duas lojas em dias consecutivos:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  store employee sales
0 AO 18
1 AO 10
2 AR 14
3 AR 13
4 BO 19
5 BO 24
6 BR 25
7 BR 29

Podemos usar a seguinte sintaxe para criar uma coluna de compensação que exiba as vendas do dia anterior para cada funcionário em cada loja:

 #add column that displays lag of sales column by store and employee
df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store employee sales lagged_sales
0 AO 18 NaN
1 AO 10 18.0
2 AR 14 NaN
3 AR 13 14.0
4 BO 19 NaN
5 BO 24 19.0
6 BR 25 NaN
7 BR 29 25.0

A nova coluna lagged_sales exibe as vendas do dia anterior para cada funcionário em cada loja.

Nota : Neste exemplo, agrupamos por duas colunas, mas você pode agrupar por quantas colunas desejar, incluindo quantos nomes de variáveis desejar na função groupby() .

Recursos adicionais

Os tutoriais a seguir explicam como realizar outras tarefas comuns em pandas:

Como deletar colunas no Pandas
Como excluir colunas no Pandas
Como aplicar uma função a colunas selecionadas no Pandas
Como alterar a ordem das colunas no Pandas DataFrame

Add a Comment

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