gpt4 book ai didi

python - pandas - 指数加权移动平均线 - 类似于 excel

转载 作者:太空狗 更新时间:2023-10-30 02:39:24 27 4
gpt4 key购买 nike

假设我有一个 10 行的数据框,其中有两列 A 和 B,如下所示:

    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

在 excel 中,我可以这样计算 rolling mean,不包括第一行: enter image description here enter image description here

我如何在 pandas 中执行此操作?

这是我尝试过的:

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

这为我提供了与 excel 匹配的所需结果。但是有更好的 Pandas 方法吗?我试过使用 expandingrolling 没有产生预期的结果。

最佳答案

您有一个指数加权移动平均线,而不是一个简单的移动平均线。这就是 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

即使只有 10 行,通过 %timeit(从 10.3 毫秒到 959 微秒),以这种方式将代码加速大约 10 倍。在 100 行上,这变成了 100 的倍数(1.1 毫秒对 110 毫秒)。

关于python - pandas - 指数加权移动平均线 - 类似于 excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com