Ответ 1
Вы можете использовать метод indexer_between_time
Index
.
Например, чтобы включить это время между 9:00 и 18:00 (включительно):
ts.ix[ts.index.indexer_between_time(datetime.time(9), datetime.time(18))]
сделать противоположное и исключить те времена между 18:00 и 9:00 (эксклюзивные):
ts.ix[ts.index.indexer_between_time(datetime.time(18), datetime.time(9),
include_start=False, include_end=False)]
Примечание: indexer_between_time
arguments include_start
и include_end
по умолчанию True
, установка include_start
- False
означает, что datetimes, чья временная часть точно start_time
(первый аргумент), в этот случай 6 вечера, не будет включен.
Пример:
In [1]: rng = pd.date_range('1/1/2000', periods=24, freq='H')
In [2]: ts = pd.Series(pd.np.random.randn(len(rng)), index=rng)
In [3]: ts.ix[ts.index.indexer_between_time(datetime.time(10), datetime.time(14))]
Out[3]:
2000-01-01 10:00:00 1.312561
2000-01-01 11:00:00 -1.308502
2000-01-01 12:00:00 -0.515339
2000-01-01 13:00:00 1.536540
2000-01-01 14:00:00 0.108617
Примечание: тот же синтаксис (с использованием ix
) работает для DataFrame:
In [4]: df = pd.DataFrame(ts)
In [5]: df.ix[df.index.indexer_between_time(datetime.time(10), datetime.time(14))]
Out[5]:
0
2000-01-03 10:00:00 1.312561
2000-01-03 11:00:00 -1.308502
2000-01-03 12:00:00 -0.515339
2000-01-03 13:00:00 1.536540
2000-01-03 14:00:00 0.108617