Python Pandas - 視窗函式



Pandas 中的視窗函式提供了一種強大的方法來對一系列資料執行操作,允許您計算統計資料和其他聚合資料視窗中的資料點。這些函式在時間序列分析和其他需要考慮每個觀測值周圍一系列資料點的情況中特別有用。

Pandas 支援四種主要的視窗操作型別:

  • 滾動視窗:一個可以是固定大小或可變大小的滑動視窗。

  • 加權視窗:由 scipy.signal 庫提供的非矩形加權視窗。

  • 擴充套件視窗:一個累積視窗,包含直到當前點的所有資料點。

  • 指數加權視窗:一個累積視窗,對以前的資料點應用指數加權。

我們現在將學習如何將這些應用於 DataFrame 物件。

滾動視窗

滾動視窗操作涉及在資料上移動一個固定大小的視窗,在該視窗內執行聚合函式(如求和或平均值)。它非常靈活,並支援各種基於時間的操作。

要執行此操作,我們可以使用rolling() 函式。此函式可以應用於一系列資料。指定window=n 引數並在其之上應用適當的統計函式。rolling() 函式返回pandas.typing.api.Rolling 物件。

示例

以下是使用rolling() 函式在 DataFrame 上應用滾動視窗操作的示例。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print(df.rolling(window=3).mean())

輸出如下:

                    A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.628267   -0.047040   -0.287467   -0.161110
2000-01-05   0.398233    0.003517    0.099126   -0.405565
2000-01-06   0.641798    0.656184   -0.322728    0.428015
2000-01-07   0.188403    0.010913   -0.708645    0.160932
2000-01-08   0.188043   -0.253039   -0.818125   -0.108485
2000-01-09   0.682819   -0.606846   -0.178411   -0.404127
2000-01-10   0.688583    0.127786    0.513832   -1.067156

注意:由於視窗大小為 3,因此前兩個元素為空,從第三個元素開始,值為nn-1n-2 元素的平均值。因此,我們也可以應用上面提到的各種函式。

加權視窗

加權視窗應用非矩形視窗函式,通常用於訊號處理。win_type 引數用於指定視窗型別,它對應於scipy.signal 庫中的視窗函式。

示例

此示例演示了在 Pandas Series 物件上應用加權視窗操作。

import pandas as pd

# Creating a series
s = pd.Series(range(10))

# Applying a triangular weighted window
result = s.rolling(window=5, win_type="triang").mean()
print(result)

當我們執行上述程式時,它會產生以下結果:

0    NaN
1    NaN
2    NaN
3    NaN
4    2.0
5    3.0
6    4.0
7    5.0
8    6.0
9    7.0
dtype: float64

擴充套件視窗

擴充套件視窗計算直到當前點為止的所有可用資料點的聚合統計資料,允許進行累積計算。

expanding() 函式可以應用於一系列資料。指定min_periods=n 引數並在其之上應用適當的統計函式。此函式返回pandas.typing.api.Expanding 物件。

示例

以下是 DataFrame 物件上應用擴充套件視窗操作的示例。

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print(df.expanding(min_periods=3).mean())

輸出如下:

                    A           B           C           D
2000-01-01        NaN         NaN         NaN         NaN
2000-01-02        NaN         NaN         NaN         NaN
2000-01-03   0.434553   -0.667940   -1.051718   -0.826452
2000-01-04   0.743328   -0.198015   -0.852462   -0.262547
2000-01-05   0.614776   -0.205649   -0.583641   -0.303254
2000-01-06   0.538175   -0.005878   -0.687223   -0.199219
2000-01-07   0.505503   -0.108475   -0.790826   -0.081056
2000-01-08   0.454751   -0.223420   -0.671572   -0.230215
2000-01-09   0.586390   -0.206201   -0.517619   -0.267521
2000-01-10   0.560427   -0.037597   -0.399429   -0.376886

指數加權視窗

這種型別的視窗操作對以前的資料點應用指數加權,這意味著較舊的資料點的重要性逐漸降低。

ewm() 函式應用於一系列資料。指定任何 com、span、halflife 引數並在其之上應用適當的統計函式。它以指數方式分配權重。此函式返回pandas.typing.api.ExponentialMovingWindow 物件。

import pandas as pd
import numpy as np
 
df = pd.DataFrame(np.random.randn(10, 4),
   index = pd.date_range('1/1/2000', periods=10),
   columns = ['A', 'B', 'C', 'D'])
print(df.ewm(com=0.5).mean())

輸出如下:

                    A           B           C           D
2000-01-01   1.088512   -0.650942   -2.547450   -0.566858
2000-01-02   0.865131   -0.453626   -1.137961    0.058747
2000-01-03  -0.132245   -0.807671   -0.308308   -1.491002
2000-01-04   1.084036    0.555444   -0.272119    0.480111
2000-01-05   0.425682    0.025511    0.239162   -0.153290
2000-01-06   0.245094    0.671373   -0.725025    0.163310
2000-01-07   0.288030   -0.259337   -1.183515    0.473191
2000-01-08   0.162317   -0.771884   -0.285564   -0.692001
2000-01-09   1.147156   -0.302900    0.380851   -0.607976
2000-01-10   0.600216    0.885614    0.569808   -1.110113

視窗函式主要用於透過平滑曲線在圖形上查詢資料中的趨勢。如果日常資料變化很大並且有大量資料點可用,則獲取樣本並繪製圖形是一種方法,而應用視窗計算並在結果上繪製圖形是另一種方法。透過這些方法,我們可以平滑曲線或趨勢。

廣告