2014-01-25 3 views
2

나는 거래 일이 될 수도 있고 그렇지 않을 수도있는 날짜를 가지고 있으며 각 거래일의 수익을 가진 거래일로 인덱싱 된 팬더 데이터 프레임을 가지고 있습니다. 언젠가는 앞서 수도 있고 수도대로 작동하지 않을 수 있습니다 (A 팬더 dataframe되어 반환) 그러나Pandas 데이터 프레임이 데이터 프레임의 다음 (거래) 일에 있음

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

,

내 날짜

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

내가 이런 일을하고 싶지 거래 일이 아닐세. 우리가 뭔가를 찾을 때까지 반복하고 시도하는 블록을 만들 수는 있지만 판다를 사용하는보다 우아한 방법이 있는지 궁금합니다.

답변

2

이것은 가장 우아한 해결책은 아니지만 작동합니다.

다음과 같은 아이디어가 있습니다. dt_query와 같은 날짜에서 여러 달력 일 (예 : 10 일) 내에 거래 일이 있어야하며 다음 거래일이 그 중 첫 번째 일뿐입니다. 따라서 dt_query와 dt_query + timedelta (days = 10)에서 반환되는 모든 요일을 찾아 첫 번째 요일을 가져올 수 있습니다.

귀하의 예제를 사용하면,

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

당신은 전체 열하기의 timedelta 확인할 수 있습니다

tol = np.timedelta64(days=2) 

과 :

다음 선택하려는 행을 확인하는 데 사용 공차를 정의하는 np.timedelta64()를 사용

delta = returns.column - dt_query 

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) 
:

나는 그것을 조금 변경

관련 문제