python - 如何有效地按日内时间过滤时间序列的时间索引?
问题描述
我有一个(TimeSeries 数据)数据框,它看起来像这样:
A1 A2 ... Z1 Z2
2019-06-17 00:00:01 NaN NaN ... NaN NaN
2019-06-17 00:01:59 NaN NaN ... NaN NaN
2019-06-17 00:02:29 NaN NaN ... NaN NaN
... ... ... ... ...
2020-06-17 23:55:01 NaN NaN ... NaN NaN
2020-06-17 23:58:45 NaN NaN ... NaN NaN
2020-06-17 23:59:59 NaN NaN ... NaN NaN
问题:
人们需要在白天 (00:00:00) 内进行选择,需要保持灵活,因为秒数也可以达到 59。
我如何提取给定的两个时间值(例如 15:00:00、24:00:00)之间的索引但是:仅在特定的日期范围内(例如星期一 - 星期四)?
(这就是我提取范围值的方式:)
timeRangesString = "Mon,Thur,15:00,24:00" #<== the input
rangeIndices = pd.Index()
# time ranges:
start_time = time.strptime( timeRangesString.split(",")[0], "%H:%M:%S")#.dt.strftime("%H:%M", '%H:%M:%S')
if timeRangesString.split(",")[1]=="24:00":
end_time = pd.to_datetime("23:59:59", format="%H:%M:%S")
else:
end_time = time.strptime( timeRangesString.split(",")[1], "%H:%M")#.dt.strftime("%H:%M",' %H:%M:%S')
# day ranges:
start_dayint = time.strptime( timeRangesString.split(",")[2], "%a").tm_wday
end_dayint = time.strptime( timeRangesString.split(",")[3], "%a").tm_wday
# ==> start_time == 15:00:00
# ==> end_time == 23:59:59
# ==> start_dayint == 0
# ==> end_dayint == 3
如何将范围内的索引提取到“rangeIndices”中?
解决方案
IIUC,DataFrame.between_time
并pd.DatetimeIndex.weekday
执行boolean indexing
df.loc[df.index.weekday < 4].between_time('15:00', '00:00')
推荐阅读
- reactjs - 渲染道具
- ios - Xcode 是否可以仅为给定的接收到的 IPA 文件创建 UITest 项目?
- javascript - 关于gojs,设置part的desiredSize属性
- sql - 在 Oracle denodo 中用空值替换特定日期
- java - 如何从 Java 编辑 Azure 应用注册
- python-2.7 - 如何在 Python 2.7.18 中安装 Keras 和 Tensorflow?
- javascript - 循环找不到所有匹配项
- mysql - 对两个表使用 ON DUPLICATE KEY UPDATE
- python - 我如何将这样的数据导入 R 或 Python?
- r - 如何从r数据框中提取同一列两次