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窗口计算
s.rolling(3).sum()

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

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窗口计算

窗口的类型 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窗口计算

移动窗口计算

生成案例随机数

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窗口计算
df.rolling(2).mean() #两天一个窗口,计算平均数

Pandas数据分析20——pandas窗口计算
df.rolling('4D').std() #四天一个窗口,计算方差

Pandas数据分析20——pandas窗口计算
#只对A列进行计算
df.rolling('2D')['A'].mean()
df.A.rolling('2D').mean() #同上

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

指定窗口类型,汉明窗口

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

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

使用函数

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

Pandas数据分析20——pandas窗口计算
df.A.rolling(3).agg({'A_sum':sum,'A_std': np.std})  #同一列使用不同方法

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

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窗口计算
df.A.rolling(2).apply(lambda x: abs(sum(x)+1)) #窗口求和加一再求绝对值

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

秩函数 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窗口计算
s.expanding(2).sum()

Pandas数据分析20——pandas窗口计算
s.expanding(2).mean()

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

Original: https://blog.csdn.net/weixin_46277779/article/details/126243054
Author: 阡之尘埃
Title: Pandas数据分析20——pandas窗口计算

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/740353/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球