As funções de janela calculam agregações sobre partições de um DataFrame e preservam a estrutura original das linhas. Diferentemente das agregações com groupby, que reduzem cada grupo a uma única linha de resumo, as funções de janela retornam um resultado para cada linha de entrada. Por isso, são ideais para classificações, totais acumulados e consultas com deslocamento de linhas.
A API DataFrame do PyODPS oferece suporte a funções de janela por meio de groupby combinado com mutate ou seleção de colunas.
Exemplos de uso
Os exemplos abaixo utilizam a tabela pyodps_iris. Para obter detalhes sobre o conjunto de dados, consulte Usar DataFrame para processar dados.
Agrupar por nome e aplicar funções de janela com mutate
O método mutate aplica funções de janela em cada grupo e retorna um DataFrame com o mesmo número de linhas do original. O exemplo a seguir agrupa por name e calcula uma soma cumulativa e um número de linha dentro de cada grupo.
iris = DataFrame(o.get_table('pyodps_iris'))
grouped = iris.groupby('name')
print(grouped.mutate(grouped.sepallength.cumsum(), grouped.sort('sepallength').row_number()).head(10))
Saída:
name sepallength_sum row_number
0 Iris-setosa 250.3 1
1 Iris-setosa 250.3 2
2 Iris-setosa 250.3 3
3 Iris-setosa 250.3 4
4 Iris-setosa 250.3 5
5 Iris-setosa 250.3 6
6 Iris-setosa 250.3 7
7 Iris-setosa 250.3 8
8 Iris-setosa 250.3 9
9 Iris-setosa 250.3 10
Selecione colunas usando uma função de janela
Para adicionar colunas calculadas ao lado das existentes, passe uma expressão de função de janela diretamente como coluna em uma seleção.
iris = DataFrame(o.get_table('pyodps_iris'))
print(iris['name', 'sepallength', iris.groupby('name').sort('sepallength').sepallength.cumcount()].head(5))
Saída:
name sepallength sepallength_count
0 Iris-setosa 4.3 1
1 Iris-setosa 4.4 2
2 Iris-setosa 4.4 3
3 Iris-setosa 4.4 4
4 Iris-setosa 4.5 5
Agregar por escalar
Ao agrupar por Scalar(1), todo o DataFrame é tratado como um único grupo, aplicando a função de janela globalmente. A lógica de processamento é idêntica à da agregação baseada em grupos.
from odps.df import Scalar
iris = DataFrame(o.get_table('pyodps_iris'))
iris.groupby(Scalar(1)).sort('sepallength').sepallength.cumcount()
Funções de janela compatíveis
Funções de classificação
|
Função |
Descrição |
|
|
Retorna a classificação de uma linha dentro de seu grupo. Linhas com valores iguais recebem a mesma classificação, deixando lacunas na sequência. |
|
|
Retorna a classificação densa de uma linha dentro de seu grupo. Valores iguais recebem a mesma classificação, sem lacunas. |
|
|
Retorna a classificação relativa de uma linha dentro de seu grupo. |
|
|
Retorna o número sequencial da linha dentro do grupo, começando em 1. |
Funções analíticas
|
Função |
Descrição |
|
|
Retorna o valor da linha que está |
|
|
Retorna o valor da linha que está |
|
|
Retorna o enésimo valor dentro do grupo. |
|
|
Retorna a proporção de linhas no grupo cujos valores são menores ou iguais ao valor da linha atual. |
|
|
Divide o grupo em N intervalos com base na sequência de dados e retorna o número do intervalo para cada linha. Caso os dados não possam ser distribuídos uniformemente, as linhas extras vão para o primeiro intervalo por padrão. |
Funções cumulativas
|
Função |
Descrição |
|
|
Calcula a soma cumulativa dentro de cada grupo. |
|
|
Calcula a média cumulativa dentro de cada grupo. |
|
|
Calcula a mediana cumulativa dentro de cada grupo. |
|
|
Calcula o desvio padrão cumulativo dentro de cada grupo. |
|
|
Calcula o máximo cumulativo dentro de cada grupo. |
|
|
Calcula o mínimo cumulativo dentro de cada grupo. |
|
|
Calcula a contagem cumulativa dentro de cada grupo. |
Parâmetros
Funções de classificação
As funções rank, dense_rank, percent_rank e row_number aceitam os seguintes parâmetros.
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Coluna usada para ordenação dentro do grupo. |
|
|
|
Ordem de classificação. Defina como |
lag e lead
Além dos parâmetros das funções de classificação, lag e lead aceitam:
|
Parâmetro |
Padrão |
Descrição |
|
|
— |
Número de linhas antes (para |
|
|
— |
Valor retornado quando a linha alvo não existe (por exemplo, ao consultar antes da primeira linha ou após a última). |
Funções cumulativas
Adicionalmente aos parâmetros das funções de classificação, cumsum, cummean, cummedian, cumstd, cummax, cummin e cumcount aceitam:
|
Parâmetro |
Padrão |
Descrição |
|
|
|
Defina como |
|
|
— |
Início do quadro da janela (número de linhas anteriores a incluir). |
|
|
— |
Fim do quadro da janela (número de linhas posteriores a incluir). |