我希望使用自定义DateTime索引重新索引我的数据。我希望索引是:周日下午5点到周一下午4点;周一下午5点至周二下午4点;周二下午5点至周三下午4点;周三下午5点至周四下午4点;周四下午5点至周五下午4点,每隔1分钟。我一直在玩周围与下面的代码,但我似乎不能得到任何数据填充在time_stamps。似乎我的问题可能是工作日开始和结束的时间,我不确定如何解决这个问题。如有任何帮助,不胜感激。
import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar
from pandas.tseries.offsets import CustomBusinessDay
import datetime as dt
BDAY_US=CustomBusinessDay(calendar=USFederalHolidayCalendar())
sample_freq= '1min'
dates= pd.date_range(start='2016-07-11',end='2016-07-21', freq=BDAY_US ).date
times = pd.date_range(start='17:00:00', end='16:00:00', freq=sample_freq).time[1:]
time_stamps = [dt.datetime.combine(date, time) for date in dates for time in times]
与我的答案类似,您可以生成完整范围的时间戳,然后删除您不感兴趣的时间戳:
time_stamps = pd.date_range('2016-07-11', '2016-07-21', freq='1min')
mask = ~((time_stamps.hour > 16) & (time_stamps.hour < 17))
time_stamps[mask]
有两个并发症:
首先,您需要删除周五5pm -周日4pm
weekend_mask = ~(
((time_stamps.dayofweek == 4) & (time_stamps.hour >= 17)) |
(time_stamps.dayofweek == 5) |
((time_stamps.dayofweek == 6) & (time_stamps.hour <= 16))
)
mask = mask & weekend_mask
第二个,您想要删除假日。我的链接答案的这一部分可能会有所帮助:
您可以通过向掩码添加条件来包含日历:
import numpy as np
np.in1d(index.date, calendar)
日历将是一个numpy数组的日期时间对象。