首页 > 解决方案 > 计算简单的移动平均熊猫循环

问题描述

我目前正在尝试计算几只股票数据集的简单移动平均线。为了简单起见,我只在两家公司(和 4 天的时间)上尝试了代码以使其正常工作,但输出似乎存在一些问题。下面是我的代码。

for index, row in df3.iloc[4:].iterrows():
    if df3.loc[index,'CompanyId'] == df3.loc[index-4,'CompanyId']:
        df3['SMA4'] = df3.iloc[:,1].rolling(window=4).mean()
    else:
        df3['SMA4'] = 0

这是输出:输出

数据框按日期和公司 ID 排序。所以需要发生的是,当公司 id 不等于代码中所述时,输出应该为零,因为我无法计算两家不同公司的移动平均值。相反,它会输出两家公司的移动平均线,如第 7、8、9 行。

标签: pythonpandasdataframeoutputmoving-average

解决方案


利用groupby.rolling

df['SMA4']=df.groupby('CompanyId',sort=False).rolling(window=4).Price.mean().reset_index(drop='CompanyId')
print(df)

    CompanyId  Price   SMA4
0           1     75    NaN
1           1     74    NaN
2           1     77    NaN
3           1     78  76.00
4           1     80  77.25
5           1     79  78.50
6           1     80  79.25
7           0     10    NaN
8           0      9    NaN
9           0     12    NaN
10          0     11  10.50
11          0     11  10.75
12          0      8  10.50
13          0      9   9.75
14          0      8   9.00
15          0      8   8.25
16          0     11   9.00

推荐阅读