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