>>> 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),前两个元素有空值,第三个元素的值将是
n
, n-1
和 n-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()
可应用于系列数据。指定 com
, span
,
halflife
参数,并在其上应用适当的统计函数。它以指数形式分配权重。
>>> 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
窗口函数主要用于通过平滑曲线来以图形方式查找数据内的趋势。如果日常数据中有很多变化,并且有很多数据点可用,那么采样和绘图就是一种方法,应用窗口计算并在结果上绘制图形是另一种方法。 通过这些方法,可以平滑曲线或趋势。