Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何结合时间范围和布尔索引?_Python_Datetime_Pandas_Indexing - Fatal编程技术网

Python 如何结合时间范围和布尔索引?

Python 如何结合时间范围和布尔索引?,python,datetime,pandas,indexing,Python,Datetime,Pandas,Indexing,我有一个带有日期时间索引的数据帧: tbl.iloc[:,:2].head(5) date_time var1 var2 2011-01-01 00:05:00 97.97 1009.28 2011-01-01 00:10:00 97.53 1009.53 2011-01-01 00:15:00 97.38 1009.15 2011-01-01 00:20:00 97.23 1009.03 2011-01

我有一个带有日期时间索引的数据帧:

tbl.iloc[:,:2].head(5)

date_time               var1    var2    
2011-01-01 00:05:00     97.97   1009.28
2011-01-01 00:10:00     97.53   1009.53
2011-01-01 00:15:00     97.38   1009.15
2011-01-01 00:20:00     97.23   1009.03
2011-01-01 00:25:00     97.01   1009.03
现在我想选择周一到周五的早上6点到晚上7点,周六的早上6点到下午5点,周日的早上8点到下午5点

我可以在以下时间范围内做到这一点:

import datetime
selection = tbl.ix[datetime.time(6):datetime.time(19)]
添加工作日条件,即结合时间范围和布尔索引,显然与我尝试的方式不一样:

tbl['weekday'] = tbl.index.weekday
test = tbl[(tbl.ix[datetime.time(6):datetime.time(19)]) & (tbl['weekday'] == 4)]
=>类型错误:无法将类型“Timestamp”与类型“str”进行比较

test = tbl[(tbl.index>datetime.time(6)) (tbl.index>datetime.time(19)) & (tbl['weekday'] == 4)]
=>类型错误:类型对象08:00:00

tbl['date'] = tbl.index
test = tbl[(tbl['date']>datetime.time(8)) & (tbl['weekday'] == 4)]
=>ValueError:无法从参数构造时间戳


我的代码有什么问题?

第一位过滤数据帧,第二位返回布尔值: 试一试

基本上应用第一个过滤器,然后在其顶部应用第二个过滤器。与布尔and等价


我建议您使用Ipython或其笔记本之类的工具来检查函数的中间结果,以确保它们仍然符合预期。如果你还没有使用pandas语法的经验,那么就很难直接写出这些表达式。

我现在找到了一个解决方案:

criterion1 = tbl.index.map(lambda i: i.hour >= 8)
criterion2 = tbl.index.map(lambda i: i.hour < 19)
criterion3 = (tbl['weekday'] == 4) 

tbl[criterion1 & criterion2 & criterion3]
criterion1=tbl.index.map(λi:i.hour>=8)
标准2=待测指数图(λi:i.小时<19)
标准3=(待定[工作日]==4)
tbl[标准1和标准2和标准3]

有更优雅的吗

我得到
ValueError:无法从重复的轴重新编制索引,因此这似乎不起作用。
criterion1 = tbl.index.map(lambda i: i.hour >= 8)
criterion2 = tbl.index.map(lambda i: i.hour < 19)
criterion3 = (tbl['weekday'] == 4) 

tbl[criterion1 & criterion2 & criterion3]