本文為您介紹DataFrame API支援使用視窗函數。
使用樣本
視窗函數用於將iris資料集按name列進行分組,返回一個DataFrameGroupBy對象grouped,後續針對每個分組獨立執行。
說明鳶尾花資料集(iris)來源請參見Dataframe資料處理。
iris = DataFrame(o.get_table('pyodps_iris')) grouped = iris.groupby('name') print(grouped.mutate(grouped.sepallength.cumsum(), grouped.sort('sepallength').row_number()).head(10))返回結果如下:
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
視窗函數可以用在列選擇中。
iris = DataFrame(o.get_table('pyodps_iris')) print(iris['name', 'sepallength', iris.groupby('name').sort('sepallength').sepallength.cumcount()].head(5))返回結果如下:
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視窗函數按標量彙總時,與分組彙總的處理方式一致。
from odps.df import Scalar iris = DataFrame(o.get_table('pyodps_iris')) iris.groupby(Scalar(1)).sort('sepallength').sepallength.cumcount()
函數介紹
DataFrame API支援的視窗函數如下。
視窗函數 | 說明 |
cumsum | 計算累積和。 |
cummean | 計算累積均值。 |
cummedian | 計算累積中位元。 |
cumstd | 計算累積標準差。 |
cummax | 計算累積最大值。 |
cummin | 計算累積最小值。 |
cumcount | 計算累積和。 |
lag | 按位移量取當前行之前第幾行的值。如果當前行號為rn,則取行號為rn-offset的值。 |
lead | 按位移量取當前行之後第幾行的值。如果當前行號為rn則取行號為rn+offset的值。 |
rank | 計算排名。 |
dense_rank | 計算連續排名。 |
percent_rank | 計算一組資料中某行的相對排名。 |
row_number | 計算行號,從1開始。 |
qcut | 將分組資料按順序切分成n片,並返回當前切片值。如果切片不均勻,預設增加第一個切片的分布。 |
nth_value | 返回分組中的第n個值。 |
cume_dist | 計算分組中值小於等於當前值的行數佔分組總行數的比例。 |
參數說明
rank、dense_rank、percent_rank和row_number支援下列參數。參數名
說明
sort
排序關鍵字,預設為空白。
ascending
排序時,是否依照升序排序,預設值為True。
lag和lead除了支援rank所支援的參數,還支援下列參數。參數名
說明
offset
取資料的行距離當前行的行數。
default
當offset指定的行不存在時的傳回值。
cumsum、cummax、cummin、cummean、cummedian、cumcount和cumstd除了支援rank所支援的參數外,還支援下列參數。參數名
說明
unique
是否排除重複值,預設False。
preceding
視窗範圍起點。
following
視窗範圍終點。