2015-11-02 59 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