2012-10-16 35 views
2

我有兩個時間系列I需要加入:接合點和間隔數據

第一個是 時間序列價格的這樣

ticker date  price 
SBUX 01/01/2012 55 

第二時間序列是調整因子,其是表示爲

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

如何在大熊貓一起加入這些時間序列,以表達

表示調整後的價格
adjusted_price = historical_prices * adjustment_factor 

我知道我需要使用date_range函數將adjust_factor間隔時間系列擴展爲日常系列。 雖然問題是每行調整時間序列將有不同的日期範圍 - 是否有辦法批量從間隔日期類型轉換爲整個調整因子時間序列,而不是每行都做。

我已經發現我需要將第一個時間點的時間序列轉換爲行,第二個時間序列將時間間隔擴展爲日間粒度,並將其轉向(通過數據框)。通過結合兩個數據框,可以編寫我需要的功能

回答

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"] 

我會採用更常見的調整(例如,985爲1.5%的股息):

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