我想了解如何用较少的字符替换这个简单的while循环。
a:
2017-12-31 10
2018-1-1 9
2018-1-2 15
2018-1-3 25
2018-1-4 30
我想用更短的代码替换此代码:
b=pd.Series(index=a.index)
b[0]=0
i=1
while i< len(b):
b[i]=a[i]*0.1+b[i-1]*0.9
i+=1
答案 0 :(得分:2)
<强>设置强>
始终最好提供重建数据的明确方法。使用此代码,其他人可以使用它来计算内容。
a = pd.Series(
[10, 9, 15, 25, 30],
pd.date_range('2017-12-31', periods=5)
)
<强>解决方案强>
使用熊猫&#39; alpha
参数设置为.9
pd.Series.ewm
方法
a.ewm(alpha=.9).mean()
2017-12-31 10.000000
2018-01-01 9.090909
2018-01-02 14.414414
2018-01-03 23.942394
2018-01-04 29.394294
Freq: D, dtype: float64
要更贴近您的代码,请使用adjust=False
选项alpha=.1
a.ewm(alpha=.1, adjust=False).mean()
2017-12-31 10.0000
2018-01-01 9.9000
2018-01-02 10.4100
2018-01-03 11.8690
2018-01-04 13.6821
Freq: D, dtype: float64