2015-11-02 61 views
2

所以我有一個按日期索引的熊貓數據框。熊貓數據框按索引和整數

我需要從日期的數據框中獲取一個值...然後從前一天的數據框中獲取值...除了我不能只減去一天,因爲週末和假日都缺失來自數據。

這將是巨大的,如果我可以這樣寫:

x = dataframe.ix[date] 

i = dataframe.ix[date].index 
date2 = dataframe[i-1] 

我不嫁給這個解決方案。如果有一種方法可以在我知道的日期之前得到一個日期或索引號,我會很高興......(通過整個數據框的循環和測試,看看我是否有匹配,並保存計數...)

回答

2

使用.get_loc獲得索引標籤值的整數位置:

In [51]: 
df = pd.DataFrame(index=pd.date_range(start=dt.datetime(2015,1,1), end=dt.datetime(2015,2,1)), data={'a':np.arange(32)}) 
df 

Out[51]: 
      a 
2015-01-01 0 
2015-01-02 1 
2015-01-03 2 
2015-01-04 3 
2015-01-05 4 
2015-01-06 5 
2015-01-07 6 
2015-01-08 7 
2015-01-09 8 
2015-01-10 9 
2015-01-11 10 
2015-01-12 11 
2015-01-13 12 
2015-01-14 13 
2015-01-15 14 
2015-01-16 15 
2015-01-17 16 
2015-01-18 17 
2015-01-19 18 
2015-01-20 19 
2015-01-21 20 
2015-01-22 21 
2015-01-23 22 
2015-01-24 23 
2015-01-25 24 
2015-01-26 25 
2015-01-27 26 
2015-01-28 27 
2015-01-29 28 
2015-01-30 29 
2015-01-31 30 
2015-02-01 31 

這裏的指數使用.get_loc將返回順序位置:

In [52]:  
df.index.get_loc('2015-01-10') 

Out[52]: 
9 

通此值使用.iloc按照位置來獲得行值:

In [53]:  
df.iloc[df.index.get_loc('2015-01-10')] 

Out[53]: 
a 9 
Name: 2015-01-10 00:00:00, dtype: int32 

然後,您可以減去從這個1得到上一行:

In [54]:  
df.iloc[df.index.get_loc('2015-01-10') - 1] 

Out[54]: 
a 8 
Name: 2015-01-09 00:00:00, dtype: int32