2014-01-25 36 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)