时间序列数据统计—滑动窗口

窗口函数

import pandas as pd
import numpy as np ser_obj = pd.Series(np.random.randn(1000),
index=pd.date_range('20180101', periods=1000))
ser_obj = ser_obj.cumsum()
print(ser_obj.head())
2018-01-01    0.797334
2018-01-02 0.451286
2018-01-03 1.329133
2018-01-04 0.416577
2018-01-05 0.610993
Freq: D, dtype: float64
r_obj = ser_obj.rolling(window=5)
r_obj2 = ser_obj.rolling(window=5, center=True)
print(r_obj)
Rolling [window=5,center=False,axis=0]
print(r_obj2.mean())

# 验证:
# 前5个数据的均值
# print(ser_obj[0:5].mean()) # 1-6个数据的均值
# print(ser_obj[1:6].mean())
2018-01-01          NaN
2018-01-02 NaN
2018-01-03 0.721065
2018-01-04 0.829352
2018-01-05 0.694121
2018-01-06 0.275495
2018-01-07 0.149214
2018-01-08 0.417734
2018-01-09 0.520458
2018-01-10 1.034506
2018-01-11 1.812417
2018-01-12 2.457410
2018-01-13 2.809996
2018-01-14 3.046443
2018-01-15 2.838209
2018-01-16 2.457822
2018-01-17 2.148508
2018-01-18 1.647887
2018-01-19 1.083220
2018-01-20 1.013525
2018-01-21 0.941850
2018-01-22 0.765751
2018-01-23 0.703581
2018-01-24 0.744616
2018-01-25 0.301710
2018-01-26 -0.168597
2018-01-27 -0.851726
2018-01-28 -1.621299
2018-01-29 -2.538815
2018-01-30 -3.251647
...
2020-08-28 -50.581143
2020-08-29 -51.826380
2020-08-30 -52.950275
2020-08-31 -53.412339
2020-09-01 -53.824206
2020-09-02 -54.099840
2020-09-03 -54.140219
2020-09-04 -54.215937
2020-09-05 -54.242818
2020-09-06 -53.908675
2020-09-07 -53.493851
2020-09-08 -53.209943
2020-09-09 -52.942718
2020-09-10 -53.038547
2020-09-11 -53.188028
2020-09-12 -53.731145
2020-09-13 -54.091879
2020-09-14 -54.867172
2020-09-15 -55.202294
2020-09-16 -55.440556
2020-09-17 -54.926439
2020-09-18 -54.619663
2020-09-19 -54.128376
2020-09-20 -54.274526
2020-09-21 -54.527463
2020-09-22 -55.382880
2020-09-23 -56.309192
2020-09-24 -57.422908
2020-09-25 NaN
2020-09-26 NaN
Freq: D, Length: 1000, dtype: float64
print(r_obj2.mean())
2018-01-01          NaN
2018-01-02 NaN
2018-01-03 0.721065
2018-01-04 0.829352
2018-01-05 0.694121
2018-01-06 0.275495
2018-01-07 0.149214
2018-01-08 0.417734
2018-01-09 0.520458
2018-01-10 1.034506
2018-01-11 1.812417
2018-01-12 2.457410
2018-01-13 2.809996
2018-01-14 3.046443
2018-01-15 2.838209
2018-01-16 2.457822
2018-01-17 2.148508
2018-01-18 1.647887
2018-01-19 1.083220
2018-01-20 1.013525
2018-01-21 0.941850
2018-01-22 0.765751
2018-01-23 0.703581
2018-01-24 0.744616
2018-01-25 0.301710
2018-01-26 -0.168597
2018-01-27 -0.851726
2018-01-28 -1.621299
2018-01-29 -2.538815
2018-01-30 -3.251647
...
2020-08-28 -50.581143
2020-08-29 -51.826380
2020-08-30 -52.950275
2020-08-31 -53.412339
2020-09-01 -53.824206
2020-09-02 -54.099840
2020-09-03 -54.140219
2020-09-04 -54.215937
2020-09-05 -54.242818
2020-09-06 -53.908675
2020-09-07 -53.493851
2020-09-08 -53.209943
2020-09-09 -52.942718
2020-09-10 -53.038547
2020-09-11 -53.188028
2020-09-12 -53.731145
2020-09-13 -54.091879
2020-09-14 -54.867172
2020-09-15 -55.202294
2020-09-16 -55.440556
2020-09-17 -54.926439
2020-09-18 -54.619663
2020-09-19 -54.128376
2020-09-20 -54.274526
2020-09-21 -54.527463
2020-09-22 -55.382880
2020-09-23 -56.309192
2020-09-24 -57.422908
2020-09-25 NaN
2020-09-26 NaN
Freq: D, Length: 1000, dtype: float64
# 画图查看
import matplotlib.pyplot as plt
%matplotlib inline plt.figure(figsize=(15, 5)) ser_obj.plot(style='r--')
ser_obj.rolling(window=10, center=False).mean().plot(style='g')
ser_obj.rolling(window=10, center=True).mean().plot(style='b')

pandas时间序列滑窗-LMLPHP

05-11 20:55