Pandas窗口函数

为了处理数字数据,Pandas提供了几个变体,如滚动,展开和指数移动窗口统计的权重。 其中包括总和,均值,中位数,方差,协方差,相关性等。

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

.rolling()函数

这个函数可以应用于一系列数据。指定window=n参数并在其上应用适当的统计函数。

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.rolling(window=3).mean())

Python

执行上面示例代码,得到以下结果 -

                   A         B         C         D
2020-01-01       NaN       NaN       NaN       NaN
2020-01-02       NaN       NaN       NaN       NaN
2020-01-03 -0.306293  0.214001 -0.076004 -0.200793
2020-01-04  0.236632 -0.437033  0.046111 -0.252062
2020-01-05  0.761818 -0.181635 -0.546929 -0.738482
2020-01-06  1.306498 -0.411834 -0.680948 -0.070285
2020-01-07  0.956877 -0.749315 -0.503484  0.160620
2020-01-08  0.354319 -1.067165 -1.238036  1.051048
2020-01-09  0.262081 -0.898373 -1.059351  0.342291
2020-01-10  0.326801 -0.350519 -1.064437  0.749869

Shell

注 - 由于窗口大小为3(window),前两个元素有空值,第三个元素的值将是nn-1n-2元素的平均值。这样也可以应用上面提到的各种函数了。

.expanding()函数

这个函数可以应用于一系列数据。 指定min_periods = n参数并在其上应用适当的统计函数。

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())

Python

执行上面示例代码得到以下结果 -

                   A         B         C         D
2018-01-01       NaN       NaN       NaN       NaN
2018-01-02       NaN       NaN       NaN       NaN
2018-01-03 -0.425085 -0.124270 -0.324134 -0.234001
2018-01-04 -0.293824 -0.038188 -0.172855  0.447226
2018-01-05 -0.516146 -0.013441 -0.384935  0.379267
2018-01-06 -0.614905  0.290308 -0.594635  0.414396
2018-01-07 -0.606090  0.121265 -0.604148  0.246296
2018-01-08 -0.597291  0.075374 -0.425182  0.092831
2018-01-09 -0.380505  0.074956 -0.253081  0.146426
2018-01-10 -0.235030  0.018936 -0.259566  0.315200

Shell

.ewm()函数

ewm()可应用于系列数据。指定comspanhalflife参数,并在其上应用适当的统计函数。它以指数形式分配权重。

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.ewm(com=0.5).mean())

Python

执行上面示例函数,得到以下结果 -

                   A         B         C         D
2019-01-01  1.047165  0.777385 -1.286948 -0.080564
2019-01-02  0.484093 -0.630998 -0.975172 -0.117832
2019-01-03  0.056189  0.830492  0.116325  1.005547
2019-01-04 -0.363824  1.222173  0.497901 -0.235209
2019-01-05 -0.260685  1.066029  0.391480  1.196190
2019-01-06  0.389649  1.458152 -0.231936 -0.481003
2019-01-07  1.071035 -0.016003  0.387420 -0.170811
2019-01-08 -0.573686  1.052081  1.218439  0.829366
2019-01-09  0.222927  0.556430  0.811838 -0.562096
2019-01-10  0.224624 -1.225446  0.204961 -0.800444

 

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

 

 

Exponentially Weighted Moving Average(EWMA)指数加权移动平均是一种常用的序列数据处理方式,如下:
在时间 t, 根据实际的观测值(或量测值)我们可以求取 EWMA(t)如下:

 

EWMA(t ) = λY(t)+ ( 1-λ) EWMA(t-1) for t = 1, 2, ..., n.


* EWMA(t):t时刻的估计值 
* Y(t): t 时间之量测值﹐
* n is the number of observations to be monitored including EWMA0 
* λ ( 0 < λ< 1 ) ﹐表EWMA对于历史量测值之权重系数﹐其值越接近1,表对过去量测值的权重较低

从另一个角度看, λ 决定了EWM A估计器跟踪实际数据突然发生变化的能力,即时效性, 显然随着λ 增大, 估计器的时效性就越强,反之,越弱;另一方面,由于 λ 的存在,EWMA还表现出一定的吸收瞬时突发的能力,这种能力称为平稳性。显然随着 λ 减小, 估计器的平稳性增强,反之降低。


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
pandas提供了多种聚合函数来对数据进行统计分析。其中一种常用的聚合函数是`agg()`函数,该函数可以对分组对象使用不同的统计方法。使用`Groupby.agg(func)`的语法格式,可以针对不同的变量使用不同的统计方法进行聚合操作。 另外,pandas还提供了移动窗口函数`rolling()`,它可以与mean、count、sum、median、std等聚合函数一起使用,用于对数据进行滑动窗口的统计计算。`rolling()`函数的语法格式为`rolling(window=n, min_periods=None, center=False)`。通过指定窗口大小、是否允许窗口中的缺失值、窗口位置是否在窗口中心等参数,可以对数据进行滑动窗口的聚合操作。 此外,还有指数加权移动函数`ewm()`,全称为Exponentially Weighted Moving。该函数先对序列元素进行指数加权运算,然后计算加权后的均值。可以通过指定com、span或halflife参数来实现不同的指数加权移动计算方式。示例如下: ```python import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(10, 4), index=pd.date_range('12/1/2020', periods=10), columns=['A', 'B', 'C', 'D']) # 设置com=0.5,先加权再求均值 print(df.ewm(com=0.5).mean()) ``` 在上述示例中,使用了`ewm()`函数对DataFrame的每一列进行指数加权移动计算,通过设置`com=0.5`来指定加权的程度。 综上所述,pandas提供了多种聚合函数,包括`agg()`、`rolling()`和`ewm()`等,可以根据需求选择合适的函数来进行数据统计和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小金子的夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值