2017-12-14 4 views
0

날짜 형식의 색인이있는 팬더 데이터 프레임 (주가)이 있습니다. 매일이지만 근무일뿐입니다. 기본적으로 YTD와 1 년 전의 가격 대비 성능을 계산하려고합니다. 내 dataframe에서 실제 올해의 첫 데이트를 얻기 위해 나는 다음과 같은 방법을 사용 :파이썬 날짜 색인 : 오늘부터 1 년 전 가장 가까운 날짜 찾기

today = str(datetime.date.today()) 
curr_year = int(today[:4]) 
curr_month = int(today[5:7]) 
first_date_year = (df[str(curr_year)].first_valid_index()) 

지금 내가 년 전에 가장 가까운 날짜를 얻으려고합니다 (last_valid_index에서 정확히 1 년()). 나는 달과 해를 추출 할 수 있었지만 그때는 정확하지 않았습니다. 어떠한 제안 ? 당신이 어떤 데이터를 제공하지 않았기 때문에

감사

+0

의미합니까 '1 년 전'? 52 주, 365 일 또는 1 년? 편리한 날짜 계산을 위해서 나는''.shift()'메소드를 제공하는'arrow' 모듈을 사용할 것을 제안한다. (http://arrow.readthedocs.io/en/latest/#replace-shift). – albert

+0

정확히 1 년 전에 가장 가까운 근무일을 얻으려고하십니까? 1 년에 휴가가 있지만 다른 휴일이 없을 때 당신은 무엇을합니까? –

답변

1

, 난 당신이 같은 날짜 (문자열 유형)의 목록을 가지고 있다고 가정하고 다음

dates = ['11/01/2016', '12/01/2016', '02/01/2017', '03/01/2017'] 

당신은 다음에 그 변환 할 필요가 날짜 시간 형식으로 팬더를 사용하는 것이 좋습니다.

pd_dates = pd.to_datetime(dates) 

그런 다음 오늘과 1 년 전에 정의해야합니다.

today = datetime.today() 
date_1yr_ago = datetime(today.year-1, today.month, today.day) 

마지막으로, 당신은 date_1yr_ago 값보다 큰 날짜의 날짜 목록을 슬라이스하고 슬라이스의 첫 번째 값 얻을 : 나는 그것을 위해 날짜를 사용하는 것이 좋습니다 것

pd_dates[pd_dates > date_1yr_ago][0] 

이 첫 번째 반환을 1 년 전의 날짜보다 큰 날짜.

출력 : 다음과 같은 코드를 문자열로 그 날짜 시간 값을 변환 할 수 있습니다

Timestamp('2017-02-01 00:00:00') 

:

datetime.strftime(pd_dates[pd_dates > date_1yr_ago][0], '%Y/%m/%d') 

출력 : 당신이 무엇을

'2017/02/01' 
관련 문제