本文为您介绍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 计算分组中值小于等于当前值的行数占分组总行数的比例。
各个窗口函数支持的参数说明如下。
  • rankdense_rankpercent_rankrow_number支持下列参数。
    参数名 说明
    sort 排序关键字,默认为空。
    ascending 排序时,是否依照升序排序,默认值为True。
  • laglead除了支持rank所支持的参数,还支持下列参数。
    参数名 说明
    offset 取数据的行距离当前行的行数。
    default 当offset指定的行不存在时的返回值。
  • cumsumcummaxcummincummeancummediancumcountcumstd除了支持rank所支持的参数外,还支持下列参数。
    参数名 说明
    unique 是否排除重复值,默认False。
    preceding 窗口范围起点。
    following 窗口范围终点。