Pandas时间序列中使用rolling(center=True)方法
在本文中,我们将介绍如何在Pandas时间序列(time-series)中使用rolling(center=True)方法计算移动平均值,并解释center参数的作用。
阅读更多:Pandas 教程
Pandas rolling方法
Pandas提供了rolling方法来计算移动窗口函数,如移动平均值或移动标准差等。rolling方法将基础数据按照滑动窗口的方式进行切分,并对于每个窗口内的数据进行函数计算。例如,以下代码展示如何计算一个时间序列的5天移动平均值:
import pandas as pd
import numpy as np
df = pd.read_csv('data.csv', parse_dates=['date'], index_col='date') # 读取数据,设置日期列为索引
rolling_mean = df.rolling(window=5).mean() # 计算5天移动平均值
上述代码中,滑动窗口的大小为5天,计算的是移动平均值。rolling方法还可以计算其它函数,如移动标准差、移动最大值等。
center参数
rolling方法中可以指定center参数,用于指定计算时窗口中的元素是否包括当前时间点。当center=False时,计算不包括当前时间点。例如,以下代码计算的是5天间的移动平均值,其中第一个值是从第5天开始计算的:
rolling_mean = df.rolling(window=5, center=False).mean()
当center=True时,计算包括当前时间点。例如,以下代码计算的是5天内的移动平均值,其中第一个值是从第3天开始计算的,最后一个值是到最后5天的平均值:
rolling_mean = df.rolling(window=5, center=True).mean()
示例
为了更好地理解center参数的作用,我们将利用一个示例进行说明。
假设有如下时间序列数据:
import pandas as pd
import numpy as np
date_range = pd.date_range('20210101', periods=10, freq='D')
data = np.array([2, 4, 6, 8, 10, 12, 14, 16, 18, 20])
df = pd.DataFrame(data, index=date_range, columns=['data'])
运行代码后,得到如下数据:
data | |
---|---|
2021-01-01 | 2 |
2021-01-02 | 4 |
2021-01-03 | 6 |
2021-01-04 | 8 |
2021-01-05 | 10 |
2021-01-06 | 12 |
2021-01-07 | 14 |
2021-01-08 | 16 |
2021-01-09 | 18 |
2021-01-10 | 20 |
假设我们使用window=3计算3天间的移动平均值,且center=True:
rolling_mean = df.rolling(window=3, center=True).mean()
运行结果如下:
data | |
---|---|
2021-01-01 | NaN |
2021-01-02 | 4.0 |
2021-01-03 | 6.0 |
2021-01-04 | 8.0 |
2021-01-05 | 10.0 |
2021-01-06 | 12.0 |
2021-01-07 | 14.0 |
2021-01-08 | 16.0 |
2021-01-09 | 18.0 |
2021-01-10 | NaN |
从结果可以看出,使用center=True时,3天间的移动平均值是以当前时间点作为中心的。例如,在2021年1月5日的移动平均值计算中,窗口的左右两侧都是1月4日和1月6日的数据。
相反,如果我们将center设置为False:
rolling_mean = df.rolling(window=3, center=False).mean()
运行结果如下:
data | |
---|---|
2021-01-01 | NaN |
2021-01-02 | NaN |
2021-01-03 | 4.0 |
2021-01-04 | 6.0 |
2021-01-05 | 8.0 |
2021-01-06 | 10.0 |
2021-01-07 | 12.0 |
2021-01-08 | 14.0 |
2021-01-09 | 16.0 |
2021-01-10 | 18.0 |
从这个结果可以看出,在center=False的情况下,移动平均值窗口始终以时间序列的左侧点为起点,并且不考虑当前时间点的数据。
总结
通过本文,我们了解了如何在Pandas时间序列中使用rolling方法计算移动窗口函数,以及如何使用center参数来指定移动窗口的起点和终点。center参数的默认值为False,意味着不包括当前时间点在内的窗口数据进行计算;当center=True时,计算包括当前时间点在内的窗口数据。在实际使用中,可以根据需要选择适当的参数。