多視窗大小和Ticker分組的Pandas滾動平均值

華科雲商小雪發表於2024-01-24

最近一個學弟在在進行資料分析時,經常需要計算不同時間視窗的滾動平均線。當資料是多維度的,比如包含多個股票或商品的每日價格時,我們可能需要為每個維度計算滾動平均線。然而,如果我們使用傳統的groupby和apply方法,可能會遇到一些問題。而且也是常見得問題。

問題背景

其中一個問題是,apply方法只能對整個分組物件應用一個函式,而不能對每個分組中的每個元素應用函式。這意味著,如果我們想為每個股票計算多個時間視窗的滾動平均線,我們需要編寫一個自定義函式,該函式可以接受一個時間序列作為輸入,並返回一個包含多個滾動平均線的DataFrame。

另一個問題是,如果我們使用transform方法,可能會導致資料維度不匹配的問題。這是因為transform方法會將函式的結果應用到整個分組物件,而不是每個分組中的每個元素。這意味著,如果我們想為每個股票計算多個時間視窗的滾動平均線,transform方法會返回一個包含多個列的DataFrame,而這些列的長度與分組物件相同。這可能導致資料維度不匹配,難以進行後續分析。

解決方案

為瞭解決這些問題,我們可以使用如下方法:

1、編寫一個自定義函式,該函式可以接受一個時間序列作為輸入,並返回一個包含多個滾動平均線的DataFrame。

2、使用groupby和apply方法,將自定義函式應用到每個分組物件中的每個元素。

以下是一個示例程式碼:


def 
my_RollMeans(
x):

    w = [ 1, 2, 3]
    s = pd. Series( x)
    Bob = pd. DataFrame([ s. rolling( w1). mean(). rename( 'Price_' + str( w1)) for w1 in w]). T
    return Bob

df3. groupby( 'Ticker'). apply( lambda x: my_RollMeans( x. Price)). fillna( 0)

這個程式碼首先定義了一個自定義函式my_RollMeans,該函式可以接受一個時間序列作為輸入,並返回一個包含多個滾動平均線的DataFrame。然後,使用groupby和apply方法,將my_RollMeans函式應用到每個分組物件中的每個元素。這樣,就可以為每個股票計算多個時間視窗的滾動平均線,並避免資料維度不匹配的問題。

執行這個程式碼,可以得到以下輸出:

                   Price_1  Price_2  Price_3

Ticker Date                                
ABC    2018-07-01      9.0      0.0  0.000000
      2018-07-02      8.0      8.5  0.000000
      2018-07-03      7.0      7.5  8.000000
      2018-07-04      8.0      7.5  7.666667
      2018-07-05      8.0      8.0  7.666667
HIJ    2018-07-01      8.0      0.0  0.000000
      2018-07-02      9.0      8.5  0.000000
      2018-07-03      5.0      7.0  7.333333
      2018-07-04      6.0      5.5  6.666667
      2018-07-05      7.0      6.5  6.000000
XYZ    2018-07-01      9.0      0.0  0.000000
      2018-07-02      5.0      7.0  0.000000
      2018-07-03      9.0      7.0  7.666667
      2018-07-04      8.0      8.5  7.333333
      2018-07-05      6.0      7.0  7.666667

在這個輸出中,我們可以看到,為每個股票計算了三個時間視窗的滾動平均線,分別為1天、2天和3天。

滾動平均線(Moving Average)是一種用於平滑時間序列資料的常見統計方法。它透過計算資料序列中特定視窗範圍內資料點的平均值,來消除資料中的短期波動,突出長期趨勢。這種平滑技術有助於識別資料中的趨勢和模式。

滾動平均線的計算方法是,對於給定的視窗大小(通常是時間單位),從資料序列的起始點開始,每次將視窗內的資料點的平均值作為平均線的一個點,並逐步向序列的末尾滑動。這樣可以生成一條平滑的曲線,反映了資料的趨勢。

滾動平均線在資料分析和時間序列預測中經常被使用,特別是在金融領域,用於消除噪音、捕捉趨勢,並作為交易策略的基礎之一。如果有更好得建議歡迎評論區留言討論。


來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3004884/,如需轉載,請註明出處,否則將追究法律責任。

相關文章