Pandas数据分析20——pandas窗口计算

 参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


pandas的出生就是为了处理金融数据的,所以在处理时间序列问题上很强。时间序列简单的滑动窗口计算在pandas里面有很便捷的用法。

Pandas 窗口函数,为了处理数字数据,Pandas 提供几种窗口函数,如移动窗口函数(rolling()),扩展窗口函数(expanding()),指数加权滑动(ewm()), 同时可在基基础上调用适合的统计函数,如求和、中位数、均值、协方差、方差、相关性等。

下面来了解一下用法,还是先导入包

import numpy as np 
import pandas as pd

滑动窗口

#创建 Rolling 对象后,可以对对象进行计算操作。

s = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2020', periods=100))
s

Pandas数据分析20——pandas窗口计算_第1张图片

s.rolling(3).sum()

Pandas数据分析20——pandas窗口计算_第2张图片

#Rolling 支持的统计方法 r.agg r.apply r.count r.exclusions r.max r.median r.name r.skew r.sum r.aggregate r.corr r.cov r.kurt r.mean r.min r.quantile r.std r.var


Pandas数据分析20——pandas窗口计算_第3张图片

#窗口的类型 win_type

#将win_type 传递给.rolling 会生成一个通用的滚动窗口计算,该计算将根据 win_type进行加权。 win_type 参数支持以下类型: boxcar triang blackman hamming bartlett parzen bohman blackmanharris nuttall barthann kaiser (needs beta) gaussian (needs std) general_gaussian (needs power, width) slepian (needs width) exponential (needs tau).


例如

ser=pd.Series(range(10))
ser.rolling(window=5, win_type='triang').mean()
ser.rolling(window=5, win_type='gaussian').mean(std=0.1)
# 以下相同
ser.rolling(window=5, win_type='boxcar').mean()
ser.rolling(window=5).mean()

Pandas数据分析20——pandas窗口计算_第4张图片

 


移动窗口计算

生成案例随机数

df = pd.DataFrame(np.random.randn(100, 4),index=pd.date_range('1/1/2020', periods=100),columns=['A', 'B', 'C', 'D'])
df.head()

Pandas数据分析20——pandas窗口计算_第5张图片

df.rolling(2).mean() #两天一个窗口,计算平均数

Pandas数据分析20——pandas窗口计算_第6张图片

df.rolling('4D').std() #四天一个窗口,计算方差

Pandas数据分析20——pandas窗口计算_第7张图片

#只对A列进行计算
df.rolling('2D')['A'].mean()
df.A.rolling('2D').mean() #同上

Pandas数据分析20——pandas窗口计算_第8张图片

 #指定窗口类型,汉明窗口

df.rolling(2,win_type='hamming').mean()

Pandas数据分析20——pandas窗口计算_第9张图片

 


使用函数

df.rolling(2).agg({'A':sum,'B': np.std})  #不同列使用不同的方法计算

Pandas数据分析20——pandas窗口计算_第10张图片

df.A.rolling(3).agg({'A_sum':sum,'A_std': np.std})  #同一列使用不同方法

Pandas数据分析20——pandas窗口计算_第11张图片

 #apply() 函数接受一个额外的 func 参数,并执行通用滚动计算。 func 参数应该是一个从 ndarray 输入生成单个值的函数。 
#假设我们要滚动计算平均绝对偏差:


def mad(x):
    return np.fabs(x - x.mean()).mean()
df.rolling(window=3).apply(mad, raw=True)

Pandas数据分析20——pandas窗口计算_第12张图片

df.A.rolling(2).apply(lambda x: abs(sum(x)+1)) #窗口求和加一再求绝对值

Pandas数据分析20——pandas窗口计算_第13张图片
#秩函数 rank()
#pandas 1.4+ 版本支持窗口内的排序,它给给每个数据给出它在窗口中的序号,还可以指定序号赋于的方法:
 

s = pd.Series([1, 4, 2, 3, 5, 3])
s.rolling(3).rank()

s.rolling(3).rank(method="max")


扩展窗口

生成案例数据

s=pd.Series(range(1,8))
s

Pandas数据分析20——pandas窗口计算_第14张图片

s.expanding(2).sum()  

Pandas数据分析20——pandas窗口计算_第15张图片

s.expanding(2).mean()

 Pandas数据分析20——pandas窗口计算_第16张图片

 

你可能感兴趣的:(pandas数据分析,pandas,数据分析,python,numpy)