大熊猫 - 指数加权移动平均线 - 类似于excel

时间:2017-06-19 19:55:19

标签: python pandas mean

考虑我有一个10行的数据帧,其中有两列A和B如下:

var option = $("#car option[value=value1]");
alert(option.attr('value'));

在excel中,我可以像这样计算 A B 0 21 6 1 87 0 2 87 0 3 25 0 4 25 0 5 14 0 6 79 0 7 70 0 8 54 0 9 35 0 rolling,不包括第一行: enter image description here enter image description here

我怎么能在熊猫中做到这一点?

这是我尝试过的:

mean

这为我提供了匹配excel的理想结果。但有没有更好的熊猫方式呢?我尝试过使用import pandas as pd df = pd.read_clipboard() #copying the dataframe given above and calling read_clipboard will get the df populated for i in range(1, len(df)): df.loc[i, 'B'] = df[['A', 'B']].loc[i-1].mean() expanding没有产生预期效果。

1 个答案:

答案 0 :(得分:5)

您有一个指数加权移动平均线,而不是一个简单的移动平均线。这就是为什么pd.DataFrame.rolling不起作用的原因。您可能正在寻找pd.DataFrame.ewm

开始
df

Out[399]: 
    A  B
0  21  6
1  87  0
2  87  0
3  25  0
4  25  0
5  14  0
6  79  0
7  70  0
8  54  0
9  35  0

df['B'] = df["A"].shift().fillna(df["B"]).ewm(com=1, adjust=False).mean()
df

Out[401]: 
    A          B
0  21   6.000000
1  87  13.500000
2  87  50.250000
3  25  68.625000
4  25  46.812500
5  14  35.906250
6  79  24.953125
7  70  51.976562
8  54  60.988281
9  35  57.494141

即使只有十行,这样做也可以使用%timeit(从10.3ms开始959微秒)将代码加速大约10倍。在100行上,这成为100的因子(1.1ms对110ms)。