【发布时间】:2020-11-26 00:01:35
【问题描述】:
我正在尝试计算和绘制移动平均线以及计算它的数据:
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”放入移动平均列表中,但在绘制时这些都被忽略了。
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
关于如何做的任何想法? 提前致谢!
【问题讨论】:
-
NaN 无法在绘图中显示。您可以将前七个值设为零或将其分配给系列本身以便绘制它们
-
嗨!如果我将它们分配为 0,情节看起来真的很时髦。如何将其分配给系列?
-
我建议使用动态窗口。直到第 7 点,窗口大小应该从 1 逐渐增加到 7,然后保持不变。
-
您希望这些值是什么?
-
您可以在您的问题中添加一些数据吗?请阅读minimal reproducible example。
标签: python pandas matplotlib