pandas 学习笔记13 窗口计算

这篇博客介绍了Pandas中用于时间序列分析的窗口函数,包括滚动窗口(rolling)和扩展窗口(expanding)的操作。通过示例展示了如何计算平均值、求和、自定义函数等,并讲解了窗口参数设置,如窗口大小、类型、开闭区间等。同时,演示了对不同列进行不同统计计算的方法,以及使用apply函数进行自定义计算。
摘要由CSDN通过智能技术生成

1 窗口计算 略

2 窗口操作

s = pd.Series(range(1,7))
s.rolling(2).sum() #移动窗口
# df.rolling(
#     window,#必传,如果为int,可以表示窗口的大小,如果是offset类型,表示时间数据中窗口按此时间偏移量设定大写
#     min_periods: Optional[int] = ...,#每个窗口的最小数据,小于此窗口的输出值为NaN,offset情况下,默认为1.默认情况下,此值取窗口的大小
#     center: _bool = ...,
#     *,
#     win_type: _str,#窗口的类型,默认为加权平均,支持非常丰富的函数窗口,如:boxcar、triang等,具体算法可参考Scipy的官方文档
#     on: Optional[_str] = ...,#可选参数,对于df要作为窗口的列
#     axis: SeriesAxisType = ...,#计算的轴方向
#     closed: Optional[_str] = ...#窗口的开闭区间定义,支持right,left,both,neither.对于offset类型,默认是左开右闭,默认为right
# )
df = pd.DataFrame(np.random.randn(30,4),index=pd.date_range('10/1/2020',periods=30),columns=['A','B','C','D'])
df.rolling(2).mean() #每两天一个窗口求平均数
df.rolling('2D').mean() #每两天一个窗口求平均数,使用时间偏移,默认的最小观察数据为1,即第一天也是有数据的
# df.rolling('2D',c)['A'].mean() #代码未跑起来
df.A.rolling('2D').mean()#仅对A列进行窗口计算
df.rolling(2,win_type='hamming').sum() #使用窗口函数,汉明窗,对scipy库依赖
#支持的统计方法
# count() 非空计数
# sum() 值的总和
# mean()平均值
# median() 数值的算术中位数
# min()最小值
# max()最大值
# std()标准差
# var()无偏方差
# skew()样本偏斜度
# kurt()峰度样本
# quantile()样本分位数(百分位上的值)
# cov()无偏协方差(二进制)
# corr()关联(二进制)
#agg可以调用多个函数
df.rolling('2D').agg({'A':sum,'B':np.std}) #对窗口不同的列使用不同的计算方法
df.A.rolling('2D').agg({'A_sum':sum,'A_std':np.std}) #对同一列使用不同的函数
#apply()可以在窗口上自定义函数,要求应用此函数后产生一个单一值
df.A.rolling('2D').apply(lambda x:abs(sum(x)+1)) #对窗口求和再加1,最后求绝对值
#扩展窗口 s.expanding()只设最小可计算数量
s =pd.Series(range(1,7))
s.expanding(2).sum() #扩展窗口操作 与rolling(closed=left)相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值