2015-02-12 130 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 
相關問題