在数据开发最经常会用到将最近几个值相加、求平均等操作,类似SQL的group by,在Dataframe中使用rolling操作简单、计算效率高
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
参数说明:
- window:时间窗的大小,数值int,即向前几个数据(可以理解将最近的几个值进行group by)
- min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等
- center:把窗口的标签设置为居中,布尔型,默认False
- win_type: 窗口的类型,截取窗的各种函数。字符串类型,默认为None
- on: 可选参数,对于dataframe而言,指定要计算滚动窗口的列,值为列名
- closed:定义区间的开闭,支持int类型的window,对于offset类型默认是左开右闭的即默认为right,可以根据情况指定为left、both等
- axis:方向(轴),一般都是0
示例代码:
# -*- coding:utf-8 -*-
import pandas as pd
import numpy as np
# 创建DF
df = pd.DataFrame(np.random.randint(5, size=(10, 2)), index=pd.date_range('1/1/2020', periods=10), columns=['A', 'B'])
# 将B列最近2个值相加并生成新列
df['C'] = df['B'].rolling(window=2).sum()
# 将B列最近5个值相加并生成新列
df['D'] = df['B'].rolling(window=5).sum()
# 将B列最近2个值求平均并生成新列
df['E'] = df['B'].rolling(window=2).mean()
# 将B列最近5个值求平均并生成新列
df['F'] = df['B'].rolling(window=5).mean()
print(df)
输出结果:
A B C D E F
2020-01-01 4 0 NaN NaN NaN NaN
2020-01-02 4 1 1.0 NaN 0.5 NaN
2020-01-03 1 4 5.0 NaN 2.5 NaN
2020-01-04 2 2 6.0 NaN 3.0 NaN
2020-01-05 0 1 3.0 8.0 1.5 1.6
2020-01-06 2 1 2.0 9.0 1.0 1.8
2020-01-07 4 1 2.0 9.0 1.0 1.8
2020-01-08 3 0 1.0 5.0 0.5 1.0
2020-01-09 3 4 4.0 7.0 2.0 1.4
2020-01-10 3 3 7.0 9.0 3.5 1.8
常用聚合函数:
- mean() 求平均
- count() 非空观测值数量
- sum() 值的总和
- median() 值的算术中值
- min() 最小值
- max() 最大
- std() 贝塞尔修正样本标准差
- var() 无偏方差
- skew() 样品偏斜度(三阶矩)
- kurt() 样品峰度(四阶矩)
- quantile() 样本分位数(百分位上的值)
- cov() 无偏协方差(二元)
- corr() 相关(二进制)