Pandas 窗口函数

Pandas 窗口函数,为了处理数字数据,Pandas提供了几种窗口函数,如移动窗口函数(rolling()),扩展窗口函数(expanding()),指数加权滑动(ewm()),并可以在其上调用适合的统计函数,如总和,均值,中位数,方差,协方差,相关性等。

下来学习如何在DataFrame对象上应用如上提及的每种方法。

移动窗口函数

.rolling()函数又叫移动窗口函数,此函数可以应用于一系列数据,指定参数window=n,并在其上调用适合的统计函数。

rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
参数 说明
window 可选参数,表示时间窗的大小,注意有两种形式(int 或 offset)。如果使用 int,则数值表示计算统计量的观测值的数量即向前几个数据,如果是offset类型,表示时间窗的大小。
min_periods 每个窗口最少包含的观测值数量,小于这个值的窗口结果为NaN,值可以是int,默认None,offset情况下,默认为1。
center 把窗口的标签设置为居中。布尔型,默认False,居右
win_type 窗口的类型,截取窗的各种函数,字符串类型,默认为None。
on 可选参数,对于dataframe而言,指定要计算滚动窗口的列,值为列名。
axis int、字符串,默认为0,即对列进行计算
closed 定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭,默认为right,可以根据情况指定为left、both等。

为了提升数据的准确性,将某个点的取值扩大到包含这个点的一段区间,用区间来进行判断,这个区间就是窗口。移动窗口就是窗口向一端滑行,默认是从右往左,每次滑行并不是区间整块的滑行,而是一个单位一个单位的滑行。给个例子好理解一点:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
index = pd.date_range('1/1/2020', periods=10),
columns = ['A', 'B', 'C', 'D'])
print(df)
print (df.rolling(window=3).mean())

执行上面示例代码,得到以下结果 –
Pandas 窗口函数

首先我们设置的窗口window=3,也就是3个数取一个均值。index0, index1 为NaN,是因为它们前面都不够3个数,等到index2 的时候,它的值计算方式为(index0+index1+index2)/3,index3 的值就是(index1+index2+index3)/3,第n个元素的值将是nn-1n-2元素的平均值。

如下图所示:
Pandas 窗口函数

扩展窗口函数

.expanding()又叫扩展窗口函数,此函数可以应用于一系列数据。 指定min_periods = n参数并在其上调用适当的统计函数。

.rolling()函数参数用法相同,不同的是,其不是固定窗口长度,其长度是不断的扩大的。expanding()函数,类似cumsum()函数的累计求和,其优势在于还可以进行更多的聚类计算;

expanding(min_periods=1, center=False, axis=0)
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
      index = pd.date_range('1/1/2018', periods=10),
      columns = ['A', 'B', 'C', 'D'])
print (df.expanding(min_periods=3).mean())

执行上面示例代码得到以下结果 –
Pandas 窗口函数

首先我们设置min_periods=3,也就是至少3个数取一个均值。index0, index1 为NaN,是因为它们前面都不够3个数,等到index2 的时候,它的值计算方式为(index0+index1+index2)/3,index3 的值就是(index0+index1+index2+index3)/3,第n个元素的值将是nn-1n-2…’1’这n个元素的平均值。

指数加权滑动函数

ewm()可应用于系列数据,指定comspanhalflife参数,并在其上调用适当的统计函数。该函数表示指数加权滑动,使用场景较少,本文仅做简单介绍。

ewm(com=None, span=None, halflife=None, alpha=None, min_periods=0, adjust=True, ignore_na=False, axis=0):
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2019', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print(df)
print(df.ewm(com=0.5).mean())

执行上面示例函数,得到以下结果 –
Pandas 窗口函数

窗口函数主要用于通过平滑曲线来以图形方式查找数据内的趋势。如果日常数据中有很多变化,并且有很多数据点可用,那么采样和绘图就是一种方法,应用窗口计算并在结果上绘制图形是另一种方法。 通过这些方法,可以平滑曲线或趋势。

补充内容

.rolling()函数的衍生用法

函数 说明
rolling_count() 计算各个窗口中非NA观测值的数量
rolling_sum() 计算各个移动窗口中的元素之和
rolling_mean() 计算各个移动窗口中元素的均值
rolling_median() 计算各个移动窗口中元素的中位数
rolling_var() 计算各个移动窗口中元素的方差
rolling_std() 计算各个移动窗口中元素的标准差
rolling_min() 计算各个移动窗口中元素的最小值
rolling_max() 计算各个移动窗口中元素的最大值
rolling_corr() 计算各个移动窗口中元素的相关系数
rolling_corr_pairwise() 计算各个移动窗口中配对数据的相关系数
rolling_cov() 计算各个移动窗口中元素的的协方差
rolling_quantile() 计算各个移动窗口中元素的分位数
赞(0)

评论 抢沙发

评论前必须登录!