本文為您介紹DataFrame API支援使用視窗函數。
grouped = iris.groupby('name')
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['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.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 視窗範圍終點。