É possível utilizar a seguinte sintaxe básica para utilizar o groupby() com a função diff() em pandas:
df = df. sort_values (by=[' group_var1 ', ' group_var2 ']) df[' diff '] = df. groupby ([' group_var1 '])[' values_var ']. diff (). fillna ( 0 )
Este exemplo específico ordena as linhas do DataFrame por duas variáveis específicas e, em seguida, agrupa por group_var1 e calcula a diferença entre as linhas do ficheiro valores_var coluna.
Note-se que fillna(0) diz ao pandas para inserir um zero sempre que o valor da variável de grupo for alterado entre linhas consecutivas no DataFrame.
O exemplo seguinte mostra como utilizar esta sintaxe na prática.
Exemplo: Como usar groupby com diff em Pandas
Suponhamos que temos o seguinte DataFrame do pandas que contém o total de vendas efectuadas por duas lojas diferentes em várias datas:
import pandas as pd #create DataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'], ' date ': pd. to_datetime (['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04']), ' sales ': [12, 15, 24, 24, 14, 19, 12, 38]}) #view DataFrame print (df) store date sales 0 A 2022-01-01 12 1 A 2022-01-02 15 2 A 2022-01-03 24 3A 2022-01-04 24 4 B 2022-01-01 14 5 B 2022-01-02 19 6 B 2022-01-03 12 7 B 2022-01-04 38
Agora suponhamos que queremos criar uma nova coluna chamada diferença_de_vendas que contém a diferença nos valores de vendas entre datas consecutivas, agrupadas por loja.
Para o efeito, podemos utilizar a seguinte sintaxe:
#Ordenar o DataFrame por loja e data df = df. sort_values (by=[' store ', ' date ']) #criar uma nova coluna que contenha a diferença entre as vendas agrupadas por loja df[' sales_diff '] = df. groupby ([' store '])[' sales ']. diff (). fillna ( 0 ) #visualizar atualização do DataFrame print (df) store date sales sales_diff 0 A 2022-01-01 12 0.0 1 A 2022-01-02 15 3.0 2 A 2022-01-03 24 9.0 3 A 2022-01-04 24 0.0 4 B2022-01-01 14 0,0 5 B 2022-01-02 19 5,0 6 B 2022-01-03 12 -7,0 7 B 2022-01-04 38 26,0
O novo diferença_de_vendas contém a diferença nos valores de vendas entre datas consecutivas, agrupadas por loja.
Por exemplo, podemos ver:
- A diferença nas vendas da loja A entre 1/1/2022 e 1/2/2022 é 3 .
- A diferença nas vendas da loja A entre 1/2/2022 e 1/3/2022 é 9 .
- A diferença nas vendas da loja A entre 1/3/2022 e 1/4/2022 é 0 .
E assim por diante.