2015-02-12 104 views
3

用另一种方式提出问题:大熊猫是否有办法获得将特定日期时间包括在内的bin/window限制,是否将datetime作为重新采样索引的一部分?如何获取日期时间的开始时间和结束日期时间值?

各种重采样频率(如7月份季末的Q-JUL)非常有用,它能很好地获得单个窗口的边界,以便它可以用于过滤器。例如:“筛选结果以仅包含与X处于相同时间窗口的结果”。

我正在寻找一个功能是这样制造的一个(pd.get_datetime_limits(rule, dt)

>>> pd.get_datetime_limits("A", datetime(2014, 12, 31, 23, 59, 59)) 
(datetime.datetime(2014, 1, 1, 0, 0, 0), datetime.datetime(2014, 12, 31, 23, 59, 59)) 
>>> pd.get_datetime_limits("A", datetime(2015, 1, 1, 0, 0, 1)) 
(datetime.datetime(2015, 1, 1, 0, 0, 0), datetime.datetime(2015, 12, 31, 23, 59, 59)) 

即:跳测试点跨越一年的边界,你会得到不同的限制

注意:我相当肯定,在这个例子中,上下限不是正确的,只要它包含在内而不是正确的,但是它们在那里是为了说明这一点,并且想要得到完全匹配的熊猫确定的边界是首先想要功能的重要原因!

回答

0

如何:

#set up frame with datatime index at 7d intervals 
rng = pd.date_range('1/1/2011', periods=1000, freq='7D') 
df = pd.DataFrame({'value':range(1,1001),'date':rng}) 
df.set_index('date', inplace =True) 

#define your rule 
Rule = 'Q-JUL' 
Date = '2011-03-30' 

然后将规则应用于该DATATIME指数,并使用“to_period`过滤DateTime对象:

df1 = df[df.index.to_period(Rule) == pd.to_datetime(Date).to_period(Rule)] 

如果你想在min()max()

df1.index.min() 
df1.index.max() 
1

对于特定的期间,您可以使用start_timeend_time(重复使用一些JAB的例子):

In [11]: rng = pd.date_range('2015-01-01', periods=5, freq='42D') 

In [12]: df = pd.DataFrame({'value': np.arange(5)}, index=rng) 

In [13]: pi = df.index.to_period("Q-JUL") 

In [14]: pi[0] 
Out[14]: Period('2015Q2', 'Q-JUL') 

In [15]: pi[0].start_time 
Out[15]: Timestamp('2014-11-01 00:00:00') 

In [16]: pi[0].end_time 
Out[16]: Timestamp('2015-01-31 23:59:59.999999999') 

对于整个PeriodIndex使用to_timestamp

In [17]: pi.to_timestamp(how='start') 
Out[17]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2014-11-01, ..., 2015-05-01] 
Length: 5, Freq: None, Timezone: None 

In [18]: pi.to_timestamp(how='end') 
Out[18]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2015-01-31, ..., 2015-07-31] 
Length: 5, Freq: None, Timezone: None 
相关问题