用数据绘制移动平均线

2024-10-01 00:32:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图计算和绘制移动平均线,以及根据以下数据计算移动平均线:

def movingAvg(df):
window_size = 7
i = 0

moving_averages = []

while i < len(df) - window_size + 1:
    current_window = df[i : i + window_size]
    window_average = current_window.mean()
    moving_averages.append(window_average)
    i += 1

return moving_averages

    
dates = df_valid['dateTime']
startDay = dates.iloc[0]
lastDay = dates.iloc[-1]

fig, ax = plt.subplots(figsize=(20, 10))
ax.autoscale()
#plt.xlim(startDay, lastDay)

df_valid.sedentaryActivityMins.reset_index(drop=True, inplace=True)
df_moving = pd.DataFrame(movingAvg(df_valid['sedentaryActivityMins']))

df_nan = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]
df_nan = pd.DataFrame(df_nan)

df_moving = pd.concat([df_nan, df_moving])
plt.plot(df_valid.sedentaryActivityMins)
plt.plot(df_moving)

#plt.show()

但由于移动平均线使用7个窗口,移动平均线列表短了7个项目,因此曲线图不能正确地相互跟随

我试着把7个“NaN”放到移动平均线列表中,但当我绘图时,这些都被忽略了

图如下:here

但我希望橙色线能向前走7步。 看起来是这样的: enter image description here

df_valid.sedentaryActivityMins.head(40)
0     608
1     494
2     579
3     586
4     404
5     750
6     573
7     466
8     389
9     604
10    351
11    553
12    768
13    572
14    616
15    522
16    675
17    607
18    229
19    529
20    746
21    646
22    625
23    590
24    572
25    462
26    708
27    662
28    649
29    626
30    485
31    509
32    561
33    664
34    517
35    587
36    602
37    601
38    495
39    352
Name: sedentaryActivityMins, dtype: int64

有什么办法吗? 提前谢谢


Tags: dfsizenppltcurrentnanwindowpd
1条回答
网友
1楼 · 发布于 2024-10-01 00:32:53

当您执行concat时,索引不会更改。NAN也将采用与您系列的前7次观测相同的指数。因此,可以在concat之后重置索引,或者将ignore_索引设置为True,如下所示:

df_moving = pd.concat([df_nan, df_moving],ignore_index=True)
plt.plot(x)
plt.plot(df_moving)

这将产生预期的输出:

enter image description here

相关问题 更多 >