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