求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
要资料
 
追随技术信仰

随时听讲座
每天看新闻
 
 
Pandas 教程
1. Pandas 是什么
2.Pandas库下载和安装
3.Pandas Series入门教程
4.Pandas DataFrame入门教程
5.Pandas Panel三维数据结构
6.Python Pandas描述性统计
7.Pandas使用自定义函数
8.Pandas reindex重置索引
9.Pandas iteration遍历
10.Pandas sorting排序
11.Pandas去重函数:drop_duplicates()
12.Python Pandas处理字符串(方法详解)
13.Pandas设置数据显示格式
14.Pandas loc/iloc用法详解
15.Python Pandas统计函数
16.Python Pandas窗口函数
17.Python Pandas聚合函数
18.Python Pandas缺失值处理
19.Pandas groupby分组操作详解
20.Pandas merge合并操作
21.Pandas concat连接操作
22.Python Pandas时间序列
23.Pandas日期时间格式化
24.Padans Timedelta时间差
25.Pandas随机选择样本
26.Pandas数据重采样
27.Python Pandas分类对象
28.Python Pandas绘图
29.Python Pandas读取文件
30.Pandas csv读写文件
31.Pandas Excel读写操作
32.Pandas index操作索引
33.Pandas分层索引入门教程
34.Pandas执行SQL操作
35.Pandas和NumPy的比较
36.Pandas使用的注意事项
 

 
Python Pandas窗口函数
34 次浏览
1次  

为了能更好地处理数值型数据,Pandas 提供了几种窗口函数,比如移动函数(rolling)、扩展函数(expanding)和指数加权函数(ewm)。

窗口函数应用场景非常多。举一个简单的例子:现在有 10 天的销售额,而您想每 3 天求一次销售总和,也就说第五天的销售额等于(第三天 + 第四天 + 第五天)的销售额之和,此时窗口函数就派上用场了。

窗口是一种形象化的叫法,这些函数在执行操作时,就如同窗口一样在数据区间上移动。

本节学习主要讲解如何在 DataFrame 和 Series 对象上应用窗口函数。

rolling()

rolling() 又称移动窗口函数,它可以与 mean、count、sum、median、std 等聚合函数一起使用。为了使用方便,Pandas 为移动函数定义了专门的方法聚合方法,比如 rolling_mean()、rolling_count()、rolling_sum() 等。

其的语法格式如下:

rolling(window=n, min_periods=None, center=False)

常用参数说明如下:

参数名称 说明
window 默认值为 1,表示窗口的大小,也就是观测值的数量,
min_periods 表示窗口的最小观察值,默认与 window 的参数值相等。
center 是否把中间值做为窗口标准,默认值为 False。


下面看一组示例:

1. import pandas as pd
2. import numpy as np
3. #生成时间序列
4. df = pd.DataFrame(np.random.randn(8, 4),index = pd.date_range('12/1/2020', periods=8),columns = ['A', 'B', 'C', 'D'])
5. print(df)
6. #每3个数求求一次均值
7. print(df.rolling(window=3).mean())

输出结果:

                   A         B         C        D
2020-12-01  0.580058 -0.715246  0.440427 -1.106783
2020-12-02 -1.313982  0.068954 -0.906665  1.382941
2020-12-03  0.349844 -0.549509 -0.806577  0.261794
2020-12-04 -0.497054  0.921995  0.232008 -0.815291
2020-12-05  2.658108  0.447783  0.049340  0.329209
2020-12-06 -0.271670 -0.070299  0.860684 -0.095122
2020-12-07 -0.706780 -0.949392  0.679680  0.230930
2020-12-08  0.027379 -0.056543 -1.067625  1.386399

                   A         B         C         D
2020-12-01       NaN       NaN       NaN       NaN
2020-12-02       NaN       NaN       NaN       NaN
2020-12-03 -0.128027 -0.398600 -0.424272  0.179317
2020-12-04 -0.487064  0.147147 -0.493745  0.276481
2020-12-05  0.836966  0.273423 -0.175076 -0.074763
2020-12-06  0.629794  0.433160  0.380677 -0.193734
2020-12-07  0.559886 -0.190636  0.529901  0.155006
2020-12-08 -0.317024 -0.358745  0.157580  0.507402

window=3 表示是每一列中依次紧邻的每 3 个数求一次均值。当不满足 3 个数时,所求值均为 NaN 值,因此前两列的值为 NaN,直到第三行值才满足要求 window =3。求均值的公式如下所示:

(index1+index2+index3)/3

expanding()

expanding() 又叫扩展窗口函数,扩展是指由序列的第一个元素开始,逐个向后计算元素的聚合值。

下面示例, min_periods = n 表示向后移动 n 个值计求一次平均值:

1. import pandas as pd
2. import numpy as np
3. df = pd.DataFrame(np.random.randn(10, 4),
4. index = pd.date_range('1/1/2018', periods=10),
5. columns = ['A', 'B', 'C', 'D'])
6. print (df.expanding(min_periods=3).mean())

输出结果:

                   A         B         C         D
2020-01-01       NaN       NaN       NaN       NaN
2020-01-02       NaN       NaN       NaN       NaN
2020-01-03 -0.567833  0.258723  0.498782  0.403639
2020-01-04 -0.384198 -0.093490  0.456058  0.459122
2020-01-05 -0.193821  0.085318  0.389533  0.552429
2020-01-06 -0.113941  0.252397  0.214789  0.455281
2020-01-07  0.147863  0.400141 -0.062493  0.565990
2020-01-08 -0.036038  0.452132 -0.091939  0.371364
2020-01-09 -0.043203  0.368912 -0.033141  0.328143
2020-01-10 -0.100571  0.349378 -0.078225  0.225649

设置 min_periods=3,表示至少 3 个数求一次均值,计算方式为 (index0+index1+index2)/3,而 index3 的计算方式是 (index0+index1+index2+index3)/3,依次类推。

ewm()

ewm(全称 Exponentially Weighted Moving)表示指数加权移动。ewn() 函数先会对序列元素做指数加权运算,其次计算加权后的均值。该函数通过指定 com、span 或者 halflife 参数来实现指数加权移动。示例如下:

1. import pandas as pd
2. import numpy as np
3. df = pd.DataFrame(np.random.randn(10, 4),
4. index = pd.date_range('12/1/2020', periods=10),
5. columns = ['A', 'B', 'C', 'D'])
6. #设置com=0.5,先加权再求均值
7. print(df.ewm(com=0.5).mean())

输出结果:

                   A         B         C         D
2020-12-01 -1.511428  1.427826  0.252652  0.093601
2020-12-02 -1.245101 -0.118346  0.170232 -0.207065
2020-12-03  0.131456 -0.271979 -0.679315 -0.589689
2020-12-04 -0.835228  0.094073 -0.973924 -0.081684
2020-12-05  1.279812  1.099368  0.203033  0.019014
2020-12-06  0.132027 -0.625744 -0.145090 -0.318155
2020-12-07  0.820230  0.371620  0.119683 -0.227101
2020-12-08  1.088283 -0.275570  0.358557 -1.050606
2020-12-09  0.538304 -1.288146  0.590358 -0.164057
2020-12-10  0.589177 -1.514472 -0.613158  0.367322

在数据分析的过程中,使用窗口函数能够提升数据的准确性,并且使数据曲线的变化趋势更加平滑,从而让数据分析变得更加准确、可靠。


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



34 次浏览
1次