rolling
方法用于在时间序列数据或其他数据上创建滚动窗口(移动窗口),然后对这些窗口应用各种聚合函数,如求和、平均、最大值、最小值等。
下面是对 rolling
方法的详细介绍和一些常见的用法示例。
1. rolling
方法的基本用法
rolling
方法的基本语法如下:
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
2. 参数说明
-
window
:滚动窗口的大小,通常是一个整数,表示窗口包含的元素个数。对于时间序列数据,可以使用偏移量字符串(如'30D'
表示30天)。 -
min_periods
:窗口内的最小观测值数量,默认为窗口大小。如果窗口内的有效数据点少于这个数量,结果为NaN
。 -
center
:是否将标签设置为窗口中心,默认为False
,即窗口的标签位于窗口的右端。 -
win_type
:窗口类型,如boxcar
、triang
、blackman
等。默认为None
,即使用平滑窗口。 -
on
:用于对基于列的时间序列数据进行滚动窗口计算,指定列名。 -
axis
:沿着哪个轴进行滚动计算,默认是0
(沿着行)。 -
closed
:指定窗口是左闭、右闭、两端闭或两端开的。可以是right
、left
、both
或neither
。
3. 示例用法
3.1 创建示例数据
import pandas as pd
data = {
'Date': pd.date_range(start='2021-01-01', periods=10, freq='D'),
'Sales_Qty': [10, 15, 14, 17, 18, 19, 20, 21, 22, 23]
}
df = pd.DataFrame(data)
3.2 基本滚动窗口求和
对 Sales_Qty
列计算3天滚动窗口的和:
df['Rolling_Sum'] = df['Sales_Qty'].rolling(window=3).sum()
print(df)
输出:
Date Sales_Qty Rolling_Sum
0 2021-01-01 10 NaN
1 2021-01-02 15 NaN
2 2021-01-03 14 39.0
3 2021-01-04 17 46.0
4 2021-01-05 18 49.0
5 2021-01-06 19 54.0
6 2021-01-07 20 57.0
7 2021-01-08 21 60.0
8 2021-01-09 22 63.0
9 2021-01-10 23 66.0
3.3 滚动窗口平均值
计算5天滚动窗口的平均值:
df['Rolling_Mean'] = df['Sales_Qty'].rolling(window=5).mean()
print(df)
输出:
Date Sales_Qty Rolling_Sum Rolling_Mean
0 2021-01-01 10 NaN NaN
1 2021-01-02 15 NaN NaN
2 2021-01-03 14 39.0 NaN
3 2021-01-04 17 46.0 NaN
4 2021-01-05 18 49.0 14.8
5 2021-01-06 19 54.0 16.6
6 2021-01-07 20 57.0 17.6
7 2021-01-08 21 60.0 19.0
8 2021-01-09 22 63.0 20.0
9 2021-01-10 23 66.0 21.0
3.4 时间序列数据的滚动窗口
对日期列设置索引,并计算30天滚动窗口的和:
说明:对于基于时间的滚动窗口(如 '30D'
),即使不显式设置 min_periods
,pandas
也会默认使用时间范围内的所有数据进行计算,因此不会出现 NaN
。
df.set_index('Date', inplace=True)
df['Rolling_Sum_30D'] = df['Sales_Qty'].rolling(window='30D', closed='right').sum()
print(df)
输出:
Sales_Qty Rolling_Sum Rolling_Mean Rolling_Sum_30D
Date
2021-01-01 10 NaN NaN 10.0
2021-01-02 15 NaN NaN 25.0
2021-01-03 14 39.0 NaN 39.0
2021-01-04 17 46.0 NaN 56.0
2021-01-05 18 49.0 14.8 74.0
2021-01-06 19 54.0 16.6 93.0
2021-01-07 20 57.0 17.6 113.0
2021-01-08 21 60.0 19.0 134.0
2021-01-09 22 63.0 20.0 156.0
2021-01-10 23 66.0 21.0 179.0
3.5 其他滚动窗口操作
你可以使用其他聚合函数,例如 max
、min
、std
等:
df['Rolling_Max'] = df['Sales_Qty'].rolling(window=3).max()
df['Rolling_Min'] = df['Sales_Qty'].rolling(window=3).min()
df['Rolling_Std'] = df['Sales_Qty'].rolling(window=3).std()
print(df)
输出:
Sales_Qty Rolling_Sum Rolling_Mean Rolling_Sum_30D Rolling_Max Rolling_Min Rolling_Std
Date
2021-01-01 10 NaN NaN 10.0 NaN NaN NaN
2021-01-02 15 NaN NaN 25.0 NaN NaN NaN
2021-01-03 14 39.0 NaN 39.0 15.0 10.0 2.516611
2021-01-04 17 46.0 NaN 56.0 17.0 14.0 1.527525
2021-01-05 18 49.0 14.8 74.0 18.0 14.0 2.081666
2021-01-06 19 54.0 16.6 93.0 19.0 17.0 1.000000
2021-01-07 20 57.0 17.6 113.0 20.0 18.0 1.000000
2021-01-08 21 60.0 19.0 134.0 21.0 19.0 1.000000
2021-01-09 22 63.0 20.0 156.0 22.0 20.0 1.000000
2021-01-10 23 66.0 21.0 179.0 23.0 21.0 1.000000
rolling
方法非常灵活,可以在数据分析中用于各种滚动计算操作。
你可以根据具体需求调整滚动窗口的大小和聚合函数,从而实现对时间序列数据或其他数据的详细分析。