所以我有一个按日期索引的pandas数据帧。
我需要按日期从数据框中获取值...然后从前一天的数据框中获取值...除了我不能减去一天,因为周末和假期是数据丢失了。
如果我能写下来会很棒:
x = dataframe.ix[date]
和
i = dataframe.ix[date].index
date2 = dataframe[i-1]
我没有和这个解决方案结婚。如果有一种方法可以在我知道的日期之前准确地获取日期或索引号,我会很高兴...(没有循环遍历整个数据帧并测试是否有匹配,并保存计数...)
答案 0 :(得分: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