2014-09-28 3 views
0

다른 인덱스 값으로 팬더 데이터 프레임에서 두 가지 기준이 충족되는 인스턴스의 수를 계산하고 싶습니다. DataFrame의 잘린는 다음과 같습니다Boolean 다른 인덱스 값을 기준으로 팬더 데이터 프레임을 확인하십시오.

   GDP USRECQ 
DATE       
1947-01-01  NaN  0 
1947-04-01  NaN  0 
1947-07-01  NaN  0 
1947-10-01  NaN  0 
1948-01-01 0.095023  0 
1948-04-01 0.107998  0 
1948-07-01 0.117553  0 
1948-10-01 0.078371  0 
1949-01-01 0.034560  1 
1949-04-01 -0.004397  1 

내가 USRECQ[DATE+1]==1 and GDP[DATE]>a if GDP[DATE]!='NAN'에 대한 관찰의 수를 계산하고 싶습니다. DATE+1DATE 및 I는 USRECQ 값은 GDP의 값이 검사되는 후속 날짜 확인되어야한다는 의미를 참조함으로써

. 불행히도, 나는 나의 선택에서 다른 시간 지표로 거래를 다루는 방법을 모른다. 누군가 인스턴스의 수를 올바르게 계산하는 방법에 대해 친절하게 조언 할 수 있습니까?

답변

2

이 달성 한 5 월은 'USRECQ'의 다음 값이 무엇인지 보여주기 위해 새 열을 만드는 것입니다 다음과 같이

>>> df['USRECQ NEXT'] = df['USRECQ'].shift(-1) 
>>> df 
     DATE  GDP USRECQ USRECQ NEXT 
0 1947-01-01  NaN  0   0 
1 1947-04-01  NaN  0   0 
2 1947-07-01  NaN  0   0 
3 1947-10-01  NaN  0   0 
4 1948-01-01 0.095023  0   0 
5 1948-04-01 0.107998  0   0 
6 1948-07-01 0.117553  0   0 
7 1948-10-01 0.078371  0   1 
8 1949-01-01 0.034560  1   1 
9 1949-04-01 -0.004397  1   NaN 

그런 다음 당신은 당신의 요구 사항에 따라 DataFrame를 필터링 할 수 있습니다 :

>>> a = 0.01 
>>> df[(df['USRECQ NEXT'] == 1) & (df['GDP'] > a) & (pd.notnull(df['GDP']))] 

     DATE  GDP USRECQ USRECQ NEXT 
7 1948-10-01 0.078371  0   1 
8 1949-01-01 0.034560  1   1 

DataFrame의 행 수를 계산하려면 내장 함수 len 만 사용할 수 있습니다.

+0

가독성을 위해'~ pd.isnull' 위키''pd.notnull''을 대체하는 것이 더 낫습니다. – EdChum

+0

@EdChum - thanks; 나는'pd.notnull'이 더 읽기 쉽고 그에 따라 편집했다고 동의한다. –

1

나는 DataFrame.shift 방법이 다음 색인을 보는 관점에서 찾는 열쇠라고 생각합니다.

그리고 논 피의 논리적 인 표현은 이런 종류의 일에 정말로 유용 할 수 있습니다.

그래서 안양 당신의 dataframe 경우 다음 당신이 찾고있는 무엇을 생각하는 것은

count = df[np.logical_and(df.shift(-1)['USRECQ'] == 1,df.GDP > -0.1)] 

나는이 github에 테스트하는 데 사용되는 예제 같은 것입니다.

관련 문제