2017-09-18 11 views
0

私はこのローリング累積製品は

DATE   TICKER RETURN_DATA 
2010-01-01 xxx  0.05 
2010-01-01 yyy  0.01 
2010-01-02 xxx  0.02 
2010-01-02 yyy  0.08 
..... 
2010-01-29 xxx  0.11 
2010-01-29 yyy  0.01 

のように見えるデータ(データフレームと呼ばれるリターンが)私は何をしようとすると、4(N)-weeksローリングリターンを計算することである必要があります。

私はwindow_len = 28日、この作品が、私はちょうど私はむしろwindow_len =整数を持つよりも、時間デルタ上で、これをロールバックする必要が発見されたこの

def rolling_fct(returns, window_len): 
    return returns.groupby('TICKER')['RETURN_DATA'].rolling(window=window_len).apply(lambda x: np.prod(1+x)-1) 

を実施しました。問題は私が祝日などを扱っていることです、私の窓の長さは固定されていません。

私は長さではなく時間デルタで同じローリングロジックを探しています。

+0

'window_len = some_integer'を指定する代わりに、 'window_len =' 28D''のようなものが必要でしょうか? – Uvar

+0

はい、データポイントの数で実行するのではなく、その期間にデータポイントの数に関係なく、時間ウィンドウをロールオーバーしたいと思います。例4週は28日、20営業日に相当するはずですが、私が祝祭日を持っていれば、私は19のエントリで終わるかもしれません。私は堅牢なソリューションを探しています。 – ThatQuantDude

+0

私はあなたが何を意味しているのか知っていますが、あなたは '28D 'でそれを実行しようとしましたか?インデックスに4週間分の時間を基準にしたローリングウィンドウが表示されます。これには、休暇のために不足しているエントリに対する堅牢性も含まれます。日付情報に関しては、最初から存在していましたが、日付を保持するために明示的に "as_index = False"を指定する必要があります。 – Uvar

答えて

0

@Uvarで述べたように、pandas dataframeはウィンドウ宣言のオフセットをサポートしています。データフレームを作成し、インデックスをdatetime形式に変換する必要があります。次に、ローリング関数を使用します。

a 
     DATE TICKER RETURN_DATA 
0 2010-01-01 xxx   0.05 
1 2010-01-01 yyy   0.01 
2 2010-01-02 xxx   0.02 
3 2010-01-02 yyy   0.08 
5 2010-01-29 xxx   0.11 
6 2010-01-29 yyy   0.01 

a.DATE = pd.to_datetime(a.DATE) 
a.set_index('DATE', inplace=True) 

a.rolling('2D').mean() 

    TICKER RETURN_DATA 
DATE       
2010-01-01 xxx  0.050000 
2010-01-01 yyy  0.030000 
2010-01-02 xxx  0.026667 
2010-01-02 yyy  0.040000 
2010-01-29 xxx  0.110000 
2010-01-29 yyy  0.060000 
+0

これはサポートされていないので、私はパンダのバージョン<0.19だったので、 – ThatQuantDude

+0

古いバージョンに固執する任意の理由は? – chrisckwong821

+0

私はちょっと更新していませんが、私は今やっています – ThatQuantDude