2014-09-28 64 views
0

我想計算一個Pandas DataFrame中不同索引值下滿足兩個條件的實例的數量。數據幀的文檔片斷是:布爾值根據不同指數值的標準檢查熊貓數據框

   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我的意思是的USRECQ值應在檢查針對檢查的GDP價值隨之日期。不幸的是,我不知道如何處理我選擇的不同時間索引。有人可以建議我如何正確地計算實例的數量嗎?

回答

2

實現這一目標之一可能是創建一個新的列顯示什麼「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 

然後,你可以過濾根據您的要求您的數據幀如下:

>>> 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 2014-09-28 20:43:58

+0

@EdChum - 謝謝;我同意'pd.notnull'更具可讀性並進行了相應的編輯。 – 2014-09-28 20:47:30

1

我認爲DataFrame.shift方法是您尋找下一個索引方面的關鍵。

Numpy的邏輯表達式對於這些類型的東西來說非常方便。

所以,如果DF是你的數據幀那麼我認爲你要尋找的是一樣的東西

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

我用來測試這是github的例子。