本文为您介绍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 窗口范围终点。