>>> from env_helper import info; info()
页面更新时间: 2023-07-09 19:05:05
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-10-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

7.6. Pandas窗口函数

为了处理数字数据,Pandas提供了几个变体,如滚动,展开和指数移动窗口统计的权重。 其中包括总和,均值,中位数,方差,协方差,相关性等。

下面来学习如何在DataFrame对象上应用上提及的每种方法。

7.6.1. .rolling() 函数

这个函数可以应用于一系列数据。指定 window=n 参数并在其上应用适当的统计函数。

>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(10, 4),
>>>                   index = pd.date_range('1/1/2020', periods=10),
>>>                   columns = ['A', 'B', 'C', 'D'])
>>> df
A B C D
2020-01-01 0.076712 -0.920364 -1.348489 -1.314989
2020-01-02 0.108018 1.351675 0.634150 1.203714
2020-01-03 -0.370539 -0.354773 1.710944 -1.423756
2020-01-04 -0.301183 -1.290201 1.087464 0.193352
2020-01-05 0.921623 2.195446 1.628199 -0.587833
2020-01-06 0.197645 0.747057 -1.301380 -0.085671
2020-01-07 0.933463 -0.375823 0.643442 -1.574366
2020-01-08 1.692051 -1.244721 0.679152 -0.015244
2020-01-09 0.496285 -0.963431 -0.374494 1.100263
2020-01-10 -0.324814 0.040174 -0.519205 -0.264460
>>> df.rolling(window=3).mean()
A B C D
2020-01-01 NaN NaN NaN NaN
2020-01-02 NaN NaN NaN NaN
2020-01-03 0.597107 -0.112658 -0.530049 0.431580
2020-01-04 0.242086 -0.605722 -0.799805 0.664094
2020-01-05 0.331169 -0.790050 -0.599451 0.835202
2020-01-06 -0.219432 -0.916025 -0.908023 0.494094
2020-01-07 -0.317458 -1.129299 -0.647659 -0.445300
2020-01-08 -0.338000 0.039653 -0.179613 -0.917186
2020-01-09 0.070571 -0.587367 -0.296395 -0.287307
2020-01-10 0.111041 -0.593053 -0.283323 0.485048

注 - 由于窗口大小为 3(window),前两个元素有空值,第三个元素的值将是 nn-1n-2 元素的平均值。 这样也可以应用上面提到的各种函数了。

7.6.2. .expanding() 函数

这个函数可以应用于一系列数据。 指定 min_periods = n 参数并在其上应用适当的统计函数。

>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(10, 4),
>>>       index = pd.date_range('1/1/2018', periods=10),
>>>       columns = ['A', 'B', 'C', 'D'])
>>> print (df.expanding(min_periods=3).mean())
                   A         B         C         D
2018-01-01       NaN       NaN       NaN       NaN
2018-01-02       NaN       NaN       NaN       NaN
2018-01-03 -0.326503  1.027633 -0.168767 -0.106197
2018-01-04  0.203008  0.913623 -0.052735 -0.162550
2018-01-05 -0.040876  0.504188  0.058288 -0.203088
2018-01-06  0.231369  0.239373  0.005718 -0.302668
2018-01-07  0.328915 -0.135960  0.097012 -0.507462
2018-01-08  0.351294 -0.273786 -0.239335 -0.377353
2018-01-09  0.168846 -0.202468 -0.025861 -0.441140
2018-01-10  0.217593 -0.009194 -0.188847 -0.514667

7.6.3. .ewm() 函数

ewm() 可应用于系列数据。指定 comspanhalflife参数,并在其上应用适当的统计函数。它以指数形式分配权重。

>>> import pandas as pd
>>> import numpy as np
>>>
>>> df = pd.DataFrame(np.random.randn(10, 4),
>>>    index = pd.date_range('1/1/2019', periods=10),
>>>    columns = ['A', 'B', 'C', 'D'])
>>> print (df.ewm(com=0.5).mean())
                   A         B         C         D
2019-01-01  0.738579 -0.346678  1.101325  0.073663
2019-01-02  0.573851 -0.077613 -0.087500 -1.515811
2019-01-03  0.295610 -1.100579 -0.572751 -1.120815
2019-01-04  0.140120  0.358125 -0.409184  0.814050
2019-01-05  0.144952 -0.056311 -1.334482  0.879481
2019-01-06 -0.676038  0.121046  0.277793  1.157967
2019-01-07 -0.150432  0.629961  1.140797  0.227383
2019-01-08 -1.058170  0.059593 -0.030578  0.246596
2019-01-09 -0.627453 -0.360242 -0.222999  0.463244
2019-01-10  0.579833  0.280246 -1.652930  0.021212

窗口函数主要用于通过平滑曲线来以图形方式查找数据内的趋势。如果日常数据中有很多变化,并且有很多数据点可用,那么采样和绘图就是一种方法,应用窗口计算并在结果上绘制图形是另一种方法。 通过这些方法,可以平滑曲线或趋势。