pandas: ewm的参数设置

pandas 指数加权滑动(ewm), 指数加权滑动平均(ewma)

pandas.DataFrame.ewm()

import pandas as pd
import numpy as np

df = pd.DataFrame([0.0, np.nan, 1.0, 2.0, np.nan, 3.0])
print(df)
    0
0   0.0
1   NaN
2   1.0
3   2.0
4   NaN
5   3.0
print('span=2,ignore_na=False, adjust= True :\n', df.ewm(span=2,ignore_na=False, adjust= True).mean())
print('\n span=2,ignore_na=True, adjust= True :\n', df.ewm(span=2,ignore_na=True, adjust= True).mean())
  • 忽略nan,就是从计算yt时候向前看,nan值不看,加权向历史走去
  • 不忽略nan时候,nan处也付给权重,但是最后算的结果nan位置的权重被占掉了。
  • 我们应该选择ignore_na=True合理一些。
  • nan数据的那个时刻的ewma由其前面历史数据计算得到,只有历史数据包括子自己全是nan,结果才是nan,这其实相当于是将平均的结果用其前面一个值填充!!!!

我们看下计算结果:

span=2,ignore_na=False, adjust= True :
           0
0  0.000000
1  0.000000
2  0.900000
3  1.702703
4  1.702703
5  2.828571

 span=2,ignore_na=True, adjust= True :
           0
0  0.000000
1  0.000000
2  0.750000
3  1.615385
4  1.615385
5  2.550000

滑动平均ewa时如何计算的?

When adjust=True we have y0=x0 y 0 = x 0 and from the last representation above we have yt=αxt+(1α)yt1 y t = α x t + ( 1 − α ) y t − 1 , therefore there is an assumption that x0 x 0 is not an ordinary value but rather an exponentially weighted moment of the infinite series up to that point.

adjust=True:

yt=xt+(1α)xt1+(1α)2xt2+...+(1α)tx01+(1α)+(1α)2+...+(1α)t y t = x t + ( 1 − α ) x t − 1 + ( 1 − α ) 2 x t − 2 + . . . + ( 1 − α ) t x 0 1 + ( 1 − α ) + ( 1 − α ) 2 + . . . + ( 1 − α ) t

这是考虑到历史数据的有限性,如果历史数据趋于无限的话,这个表达式的分母会变为 11(1α) 1 1 − ( 1 − α )

adjust=False:

y0=x0,yt=(1α)yt1+αxt y 0 = x 0 , y t = ( 1 − α ) y t − 1 + α x t

等价于
wi=α(1α)iifi<t(1α)iifi=t w i = α ( 1 − α ) i i f i < t ( 1 − α ) i i f i = t

这种情况下,假定历史数据是无限长的。

参考链接:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.ewm.html
http://pandas.pydata.org/pandas-docs/stable/computation.html#exponentially-weighted-windows

DataFrame的ewm方法是pandas库中的一个函数方法,用于提供指数加权(EW)的计算功能。通过使用ewm方法,可以对数据进行指数加权平均、方差、标准差、相关性和协方差等操作。 在使用ewm方法时,需要提供至少一个参数,即com、span、halflife或alpha。这四个参数中只能选择一个进行设置,不支持同时设置两个或更多参数。其中,com表示指定指数加权的时间间隔,span表示指定指数加权的时间跨度,halflife表示指定指数加权的半衰期,alpha表示指定指数加权的平滑因子。 除了以上参数外,还有一些可选参数可以进行设置,如min_periods、adjust、ignore_na、axis和times。这些参数可以根据需要进行调整以适应具体的计算需求。 下面是一个使用DataFrame的ewm方法的例子: ``` import pandas as pd import numpy as np df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]}) df.ewm(com=1).mean() df.ewm(span=3).mean() df.ewm(alpha=0.5).mean() df.ewm(halflife=1).mean() ``` 以上代码展示了使用不同参数进行指数加权计算的例子。通过指定不同的参数,可以得到不同的加权结果。 请注意,以上引用中提到的pandas版本号是1.2.2。在不同的版本中,可能会有一些参数的使用方式或默认值发生变化,建议根据具体的版本进行参考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [DataFrame指数权重窗口ewm使用: DataFrame.ewm([com, span, halflife, …])](https://blog.csdn.net/chenhepg/article/details/114668297)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值