Todos os produtos
Search
Central de documentação

MaxCompute:Funções de janela

Última atualização: Jun 26, 2026

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

rank

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.

dense_rank

Retorna a classificação densa de uma linha dentro de seu grupo. Valores iguais recebem a mesma classificação, sem lacunas.

percent_rank

Retorna a classificação relativa de uma linha dentro de seu grupo.

row_number

Retorna o número sequencial da linha dentro do grupo, começando em 1.

Funções analíticas

Função

Descrição

lag

Retorna o valor da linha que está offset linhas antes da linha atual. Se essa linha não existir, retorna default.

lead

Retorna o valor da linha que está offset linhas após a linha atual. Se essa linha não existir, retorna default.

nth_value

Retorna o enésimo valor dentro do grupo.

cume_dist

Retorna a proporção de linhas no grupo cujos valores são menores ou iguais ao valor da linha atual.

qcut

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

cumsum

Calcula a soma cumulativa dentro de cada grupo.

cummean

Calcula a média cumulativa dentro de cada grupo.

cummedian

Calcula a mediana cumulativa dentro de cada grupo.

cumstd

Calcula o desvio padrão cumulativo dentro de cada grupo.

cummax

Calcula o máximo cumulativo dentro de cada grupo.

cummin

Calcula o mínimo cumulativo dentro de cada grupo.

cumcount

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

sort

"" (string vazia)

Coluna usada para ordenação dentro do grupo.

ascending

True

Ordem de classificação. Defina como False para ordem decrescente.

lag e lead

Além dos parâmetros das funções de classificação, lag e lead aceitam:

Parâmetro

Padrão

Descrição

offset

Número de linhas antes (para lag) ou depois (para lead) da linha atual a serem recuperadas.

default

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

unique

False

Defina como True para remover duplicatas dos valores antes do cálculo.

preceding

Início do quadro da janela (número de linhas anteriores a incluir).

following

Fim do quadro da janela (número de linhas posteriores a incluir).