Tous les produits
Search
Centre de documentation

MaxCompute:Fonctions de fenêtre

Dernière mise à jour :Aug 10, 2026

Les fonctions de fenêtre calculent des agrégations sur les partitions d'un DataFrame tout en préservant la structure initiale des lignes. Contrairement aux agrégations groupby qui réduisent chaque groupe à une seule ligne récapitulative, les fonctions de fenêtre renvoient un résultat pour chaque ligne d'entrée. Elles constituent l'outil idéal pour établir des classements, calculer des totaux cumulés et rechercher des décalages entre les lignes.

L'API PyODPS DataFrame prend en charge les fonctions de fenêtre via groupby combiné avec mutate ou la sélection de colonnes.

Exemples d'utilisation

Les exemples ci-dessous utilisent la table pyodps_iris. Pour plus de détails sur le jeu de données, consultez la rubrique Utiliser DataFrame pour traiter des données.

Regrouper par nom et appliquer des fonctions de fenêtre avec mutate

La méthode mutate applique les fonctions de fenêtre à chaque groupe et renvoie un DataFrame contenant le même nombre de lignes que l'original. L'exemple suivant regroupe les données par name et calcule une somme cumulative ainsi qu'un numéro de ligne au sein de chaque groupe.

iris = DataFrame(o.get_table('pyodps_iris'))
grouped = iris.groupby('name')
print(grouped.mutate(grouped.sepallength.cumsum(), grouped.sort('sepallength').row_number()).head(10))

Sortie :

            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

Sélectionner des colonnes à l'aide d'une fonction de fenêtre

Transmettez directement une expression de fonction de fenêtre en tant que colonne dans une sélection pour ajouter des colonnes calculées aux côtés des colonnes existantes.

iris = DataFrame(o.get_table('pyodps_iris'))
print(iris['name', 'sepallength', iris.groupby('name').sort('sepallength').sepallength.cumcount()].head(5))

Sortie :

          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

Agrégation par scalaire

Le regroupement par Scalar(1) considère l'intégralité du DataFrame comme un seul groupe, appliquant ainsi la fonction de fenêtre de manière globale. La logique de traitement est identique à celle de l'agrégation basée sur les groupes.

from odps.df import Scalar
iris = DataFrame(o.get_table('pyodps_iris'))
iris.groupby(Scalar(1)).sort('sepallength').sepallength.cumcount()

Fonctions de fenêtre prises en charge

Fonctions de classement

Fonction

Description

rank

Renvoie le rang d'une ligne au sein de son groupe. Les lignes ayant des valeurs égales reçoivent le même rang, ce qui crée des trous dans la séquence.

dense_rank

Renvoie le rang dense d'une ligne au sein de son groupe. Les valeurs égales reçoivent le même rang sans créer de trous.

percent_rank

Renvoie le rang relatif d'une ligne au sein de son groupe.

row_number

Renvoie le numéro séquentiel de la ligne au sein du groupe, en commençant par 1.

Fonctions analytiques

Fonction

Description

lag

Renvoie la valeur de la ligne située offset lignes avant la ligne actuelle. Si aucune ligne n'existe, renvoie default.

lead

Renvoie la valeur de la ligne située offset lignes après la ligne actuelle. Si aucune ligne n'existe, renvoie default.

nth_value

Renvoie la Nième valeur au sein du groupe.

cume_dist

Renvoie la proportion de lignes du groupe dont les valeurs sont inférieures ou égales à la valeur de la ligne actuelle.

qcut

Divise le groupe en N intervalles selon la séquence de données et renvoie le numéro d'intervalle pour chaque ligne. Si les données ne peuvent pas être distribuées uniformément, les lignes supplémentaires sont placées dans le premier intervalle par défaut.

Fonctions cumulatives

Fonction

Description

cumsum

Calcule la somme cumulative au sein de chaque groupe.

cummean

Calcule la moyenne cumulative au sein de chaque groupe.

cummedian

Calcule la médiane cumulative au sein de chaque groupe.

cumstd

Calcule l'écart type cumulé au sein de chaque groupe.

cummax

Calcule le maximum cumulé au sein de chaque groupe.

cummin

Calcule le minimum cumulé au sein de chaque groupe.

cumcount

Calcule le nombre cumulé d'éléments au sein de chaque groupe.

Paramètres

Fonctions de classement

Les fonctions rank, dense_rank, percent_rank et row_number acceptent les paramètres suivants.

Paramètre

Valeur par défaut

Description

sort

"" (chaîne vide)

Colonne utilisée pour le tri au sein du groupe.

ascending

True

Ordre de tri. Définissez sur False pour un ordre décroissant.

lag et lead

En plus des paramètres des fonctions de classement, lag et lead acceptent :

Paramètre

Valeur par défaut

Description

offset

Nombre de lignes avant (pour lag) ou après (pour lead) la ligne actuelle à récupérer.

default

Valeur à renvoyer lorsque la ligne cible n'existe pas (par exemple, lors d'une recherche avant la première ligne ou après la dernière).

Fonctions cumulatives

En plus des paramètres des fonctions de classement, cumsum, cummean, cummedian, cumstd, cummax, cummin et cumcount acceptent :

Paramètre

Valeur par défaut

Description

unique

False

Définissez sur True pour dédupliquer les valeurs avant le calcul.

preceding

Début du cadre de la fenêtre (nombre de lignes précédentes à inclure).

following

Fin du cadre de la fenêtre (nombre de lignes suivantes à inclure).