2

参加する必要がある 2 つの時系列があります。

最初のものは、このような価格の時系列です

ticker date       price 
SBUX   01/01/2012 55

2 番目の時系列は、次のように表される調整係数です。

ticker start_date end_date    adjustment_factor
SBUX   01/01/1993 01/01/1994  0.015

これらの時系列をパンダで結合して、調整された価格を式で表現するにはどうすればよいですか

adjusted_price = historical_prices * adjustment_factor

date_range 関数を使用して、adjustment_factor 間隔時系列を日系列に拡張する必要があることを理解しています。ただし、問題は、調整時系列の各行が異なる日付範囲を持つことです。すべての行に対して行うのではなく、調整係数時系列全体の間隔日付型からの変換をバッチ処理する方法はありますか。

ティッカーの最初の時点の時系列をピボットして列に入れ、日付を行にし、2番目の時系列では間隔を毎日の粒度に拡張し、ピボットする必要があることを理解しました(dataframe.pivot関数を介して)。 2 つのデータフレームを組み合わせて、必要な関数を記述できます。

4

1 に答える 1

0

dataFrame を日足バーに結合し、fillna(method="ffill") を使用して前の値を前方に入力するだけです。あなたの例では、範囲の調整係数があります。

#suppose sbux is an ohlc daily bar and adj is your adjustment factors  
adj  = pandas.DataFrame({"adj":pandas.Series(values,index = start_dates)})
sbux_with_adj  = sbux.join(adj)
sbux_with_adj["Adj"] =    sbux_with_adj["Adj"].fillna(method="ffill")
ohlc = sbux_with_adj[["Open","High","Low","Close"]] * sbux_with_adj["adj"]

次の方法で、より一般的な調整係数 (例: 1.5% の配当の場合は .985) で調整します。

sbux_with_adj  = sbux.join(adj)
sbux_with_adj["Adj"] =    sbux_with_adj["Adj"].fillna(1.0)
#now reverse cumulated adjustment.
cumulated_adj = sbux_with_adj["Adj"].cumprod().values[::-1] 
ohlc = sbux_with_adj[["Open","High","Low","Close"]] * cumulated_adj
于 2012-10-16T13:02:38.973 に答える