如何获得日期时间所在的期初和期末日期时间值?

时间:2015-02-12 02:52:45

标签: python pandas

以另一种方式提出问题:pandas是否有办法获得特定日期时间所包含的bin / window限制,该日期时间是否为重新采样的索引的一部分?

各种重新采样频率(如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))

即:在一年的范围内跳过测试点,你会得到不同的限制。

注意:我非常确定该示例中的上/下界不是正确的,只要哪一端是包容性的而不是,但它们是为了说明这一点。此外,想要获得完全匹配的熊猫决定边界是首先想要这个功能的一个重要原因!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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'

然后将规则应用于数据时间索引,并使用&#39; to_period`进行日期时间对象的过滤:

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

如果您想要min()max()

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