在系列计算中替换while循环

时间:2018-01-11 14:33:50

标签: python pandas while-loop

我想了解如何用较少的字符替换这个简单的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

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