【问题标题】:Plot moving average with data [duplicate]用数据绘制移动平均线[重复]
【发布时间】: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”放入移动平均列表中,但在绘制时这些都被忽略了。

剧情如下:

但我希望橙色线提前 7 步开始。 所以它看起来像这样:

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


【解决方案1】:

当您执行 concat 时,索引不会改变。 NaN 也将采用与您的系列的前 7 个观察值相同的索引。因此,要么在 concat 之后重置索引,要么将 ignore_index 设置为 True,如下所示:

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

这给出了预期的输出:

【讨论】:

  • 随机,但有趣的是你同时使用“indexes”和“indices”作为Index的复数。
  • 哈哈。很好的收获xD
  • 甜蜜!这工作:-) 谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 2013-12-22
  • 2022-01-26
  • 1970-01-01
相关资源
最近更新 更多