2014-09-30 2 views
3

내가 선택한 날짜리 샘플 팬더의 시계열 "월 1 일 월요일"

의 규칙 같은 특정 요일의 n 번째 발생을 사용하여, 매월 아래로 필터링 할 필요가 (매일) 팬더의 시계열이 지금까지의 내 생각은이 작업을 수행하는 가장 좋은 방법은 먼저 관심있는 모든 날짜의 목록 또는 시리즈를 만든 다음 해당 날짜에 대한 시간 표시자를 묻는 것입니다.

그러나 그래도 나는 어떻게 목록을 만들 수 있습니까? 두 달 사이에 일어난 모든 "두 번째 화요일"의 화요일?

답변

2

는 예를 들어 9 월과 10 월 2014 년 걸릴 수 있습니다 :

from datetime import datetime 
import pandas as pd 

start = datetime(2014, 9, 1) 
end = datetime(2014, 10, 30) 
d = pd.date_range(start, end) # use bdate_range for business days 

지금 당신은 단지 날짜 당신이 포함 된 마스크를 구축 할 수 있습니다 관심 분야 :

>>> mask = (d.weekday == 1) & (7 < d.day) & (d.day < 15) 
>>> d[mask] 

<class 'pandas.tseries.index.DatetimeIndex'> 
[2014-09-09, 2014-10-14] 
Length: 2, Freq: None, Timezone: None 
+0

결국이 솔루션을 사용하면 모두 좋았지 만 코드를 읽는 사람이 무슨 일이 일어나고 있는지 쉽게 볼 수있는 것처럼 보입니다. – Corone

1

일부 더미 데이터 :

In [44]: df = pd.DataFrame(data=range(1000), index=pd.date_range('1999-01-01', periods=1000), columns=['value']) 

매월 둘째 화요일을 원한다고 가정 해 봅시다. 당신은 그런 다음 달 칼럼의 주를 계산할 수 내장 팬더가

In [45]: df = df.resample('W-TUE', how='last') 

오프셋 사용하여 특정 요일에 재 샘플링 및 필터링하는 것을 사용할 수 있습니다.

In [50]: df['wom'] = df.groupby(pd.TimeGrouper('M'))['value'].transform(lambda x: range(len(x))) + 1 

In [53]: df[df['wom'] == 2].head() 
Out[53]: 
      value wom 
1999-01-12  11 2 
1999-02-09  39 2 
1999-03-09  67 2 
1999-04-13 102 2 
1999-05-11 130 2 
+0

+1 감사합니다. 좋은 해결책입니다. – Corone