2014-01-25 35 views
2

我有一個日期可能是交易日,也可能不是一個交易日,我有一個熊貓數據框由交易日指數化,每個交易日都有回報的每個交易日。大熊貓數據框在數據框中獲得下一個(交易)日

這是我迄今爲止

dt_query = datetime.datetime(2006, 12, 31, 16) 

我想要做這樣的事情(回報是大熊貓數據幀)

returns.ix[pd.Timestamp(dt_query + datetime.timedelta(days = 1))] 

但是,可能還不如提前一天可能會或可能工作不是交易日。我可以創建一個循環嘗試塊,直到找到一些東西,但我想知道是否有更簡單的方法來使用熊貓。

回答

2

這可能不是最優雅的解決方案,但它的工作原理。

這裏的想法是:從任何日期dt_query,在幾個日曆天(例如10)內,必須有交易日,而您的下一個交易日只是其中的第一個交易日。因此,您可以在dt_query和dt_query + timedelta(天數= 10)內找到所有返回日期,然後獲取第一個日期。

使用你的榜樣,它應該看起來像

next_trading_date = returns.index[(returns.index > dt_query) & (returns.index <= dt_query + timedelta(days = 10))][0] 
0

您可以檢查整個列這樣做的timedelta:

delta = returns.column - dt_query 

然後使用np.timedelta64()來定義用來檢查你想選擇哪個行的公差:

tol = np.timedelta64(days=2) 

和:

returns[delta < tol] 

將返回所需範圍內的行...

0

謝謝!這一直困擾着我好幾個小時。

我改變了一點:

try: 
    date_check = dja[start_day] 
except KeyError:       
    print("Start date not a trading day, fetching next trading day...") 
    test = dja.index.searchsorted(start_day) 
    next_date = dja.index[(dja.index > start_day)] 
    start_date = next_date[0] 
print("New date:", start_date)