>>> from env_helper import info; info()
待更新
6.6. Pandas窗口函数¶
为了处理数字数据,Pandas提供了几个变体,如滚动,展开和指数移动窗口统计的权重。 其中包括总和,均值,中位数,方差,协方差,相关性等。
下来学习如何在DataFrame对象上应用上提及的每种方法。
.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.528600 | 1.623984 | 0.478942 | -0.790543 |
2020-01-02 | 0.763437 | -0.438010 | -0.070689 | -0.936289 |
2020-01-03 | 1.243134 | 1.096209 | -0.627720 | 1.399032 |
2020-01-04 | -1.142767 | 0.755329 | -1.419957 | -1.425151 |
2020-01-05 | 0.396647 | -0.356554 | -0.227605 | 0.362909 |
2020-01-06 | -0.268281 | 0.012169 | -0.646941 | 1.164585 |
2020-01-07 | 0.695133 | -1.222514 | -1.615608 | 0.004939 |
2020-01-08 | 1.587524 | -0.532473 | -0.102960 | -0.076520 |
2020-01-09 | -0.821160 | 0.023728 | -0.077339 | 1.586905 |
2020-01-10 | -0.282919 | -0.163516 | 0.703653 | 2.334238 |
>>> 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.845057 | 0.760728 | -0.073156 | -0.109266 |
2020-01-04 | 0.287934 | 0.471176 | -0.706122 | -0.320802 |
2020-01-05 | 0.165671 | 0.498328 | -0.758427 | 0.112263 |
2020-01-06 | -0.338134 | 0.136981 | -0.764834 | 0.034114 |
2020-01-07 | 0.274500 | -0.522300 | -0.830051 | 0.510811 |
2020-01-08 | 0.671459 | -0.580940 | -0.788503 | 0.364335 |
2020-01-09 | 0.487166 | -0.577086 | -0.598636 | 0.505108 |
2020-01-10 | 0.161149 | -0.224087 | 0.174451 | 1.281541 |
注 - 由于窗口大小为3(window),前两个元素有空值,第三个元素的值将是n,n-1和n-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.032260 -0.261143 0.021765 0.160825
2018-01-04 -0.046046 -0.031841 -0.170154 0.117050
2018-01-05 -0.304701 0.195699 0.063942 0.153628
2018-01-06 -0.155876 -0.188956 0.394389 -0.044482
2018-01-07 0.032707 -0.267137 0.406838 -0.032869
2018-01-08 -0.197960 -0.104805 0.556705 -0.095725
2018-01-09 -0.365651 -0.120115 0.736378 -0.261385
2018-01-10 -0.316331 -0.277407 0.570784 -0.167081
.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.418827 -0.554295 0.116418 1.335763
2019-01-02 1.015934 -1.290212 0.207759 0.882574
2019-01-03 0.075384 0.141328 0.772029 1.041951
2019-01-04 0.293864 0.364801 1.654613 1.445466
2019-01-05 -0.530265 -0.561341 0.663789 -0.845996
2019-01-06 -0.181633 -0.811195 -0.050319 -0.900416
2019-01-07 1.075773 0.022815 0.286409 -1.208064
2019-01-08 -0.072613 -0.847369 0.055422 -0.050620
2019-01-09 0.913678 0.096890 -0.659329 0.464709
2019-01-10 1.182321 -1.166641 -0.413356 0.233695
窗口函数主要用于通过平滑曲线来以图形方式查找数据内的趋势。如果日常数据中有很多变化,并且有很多数据点可用,那么采样和绘图就是一种方法,应用窗口计算并在结果上绘制图形是另一种方法。 通过这些方法,可以平滑曲线或趋势。