Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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 基于比较datetime64时间戳的多个条件创建掩码_Python_Datetime_Pandas - Fatal编程技术网

Python 基于比较datetime64时间戳的多个条件创建掩码

Python 基于比较datetime64时间戳的多个条件创建掩码,python,datetime,pandas,Python,Datetime,Pandas,我有一个数据框,它有7列datetime64格式的时间戳。前两列是“Time_in”和“Time_out”,表示一天的开始和结束。接下来的两列是“Time\u in1”和“Time\u out1”。最后两个是“时间2”和“时间2”。最后一组时间介于“输入时间”和“输出时间”之间。最后一列是“时间”,与所有其他列进行比较。此数据框中的一个示例可以是(格式也有年-月-日,但我只是通过显示时间来简化): 时间=上午9点 超时=下午5点 时间为上午11点 时间=下午12点 时间2=下午3点 时间2=下午

我有一个数据框,它有7列datetime64格式的时间戳。前两列是“Time_in”和“Time_out”,表示一天的开始和结束。接下来的两列是“Time\u in1”和“Time\u out1”。最后两个是“时间2”和“时间2”。最后一组时间介于“输入时间”和“输出时间”之间。最后一列是“时间”,与所有其他列进行比较。此数据框中的一个示例可以是(格式也有年-月-日,但我只是通过显示时间来简化):

时间=上午9点

超时=下午5点

时间为上午11点

时间=下午12点

时间2=下午3点

时间2=下午4点

我想创建一个掩码列,如果:


时间>=time\u in和time如果我理解你的例子,你想过滤一下在给定的时间
time
某个东西是否有某种中断?(在
11am
12am
之间,或者在
3pm
4pm
之间)

因此,另一个逻辑是:

# working hours:
(Time_in <= @time) and (Time_out >= @time)
# not in a break:
and not (((Time_in1 <= @time) and (Time_out1 >= @time)) or
((Time_in2 <= @time) and (Time_out2 >= @time)))
您可以在这里使用任何类型的比较(我很喜欢
query
方法),但解决问题的方法是编写逻辑,将丢失的条目替换为过去的
datetimes
,从而消除

TypeError: Cannot compare type 'Timestamp' with type 'str'

错误。

如果我理解你的例子,你想过滤一下在给定的时间
时间
某个东西是否有某种中断?(在
11am
12am
之间,或者在
3pm
4pm
之间)

因此,另一个逻辑是:

# working hours:
(Time_in <= @time) and (Time_out >= @time)
# not in a break:
and not (((Time_in1 <= @time) and (Time_out1 >= @time)) or
((Time_in2 <= @time) and (Time_out2 >= @time)))
您可以在这里使用任何类型的比较(我很喜欢
query
方法),但解决问题的方法是编写逻辑,将丢失的条目替换为过去的
datetimes
,从而消除

TypeError: Cannot compare type 'Timestamp' with type 'str'

错误。

非常感谢您的回复,克里斯。我不知道熊猫的查询方法。我对它的语法有点不熟悉;我以前从未使用过@符号-这是否像编码@column_name那样简单(或者我有点偏离基准)?另外,您能告诉我query是否在数据帧上按行跨列执行操作吗?谢谢,我现在正在看一些文档!如果您尚未找到该页面:。查询字符串可以这样解释:
.query(“column\u name\u of\u dataframe=='somestring')
。如果要使用变量而不是字符串(或数值),则可以使用
@
。这意味着以下单词是一个变量(值将被替换)。谢谢@chris-sc。我也一直在看本页上的示例:。但是,当我尝试在同一数据帧中基于感兴趣的三列创建一个新列时,出现了一个错误:df['boolean']=df.query((Time_in=timestamp)”),我得到了错误:**ValueError:传递的项数错误30,位置意味着1当我添加@符号时,变量不再被识别。非常感谢你的回复。我不知道熊猫的查询方法。我对它的语法有点不熟悉;我以前从未使用过@符号-这是否像编码@column_name那样简单(或者我有点偏离基准)?另外,您能告诉我query是否在数据帧上按行跨列执行操作吗?谢谢,我现在正在看一些文档!如果您尚未找到该页面:。查询字符串可以这样解释:
.query(“column\u name\u of\u dataframe=='somestring')
。如果要使用变量而不是字符串(或数值),则可以使用
@
。这意味着以下单词是一个变量(值将被替换)。谢谢@chris-sc。我也一直在看本页上的示例:。但是,当我尝试在同一数据帧中基于感兴趣的三列创建一个新列时,出现了一个错误:df['boolean']=df.query((Time_in=timestamp)”),我得到了错误:**ValueError:传递的项数错误30,位置意味着1当我添加@符号时,变量不再被识别。
# working hours:
(Time_in <= @time) and (Time_out >= @time)
# not in a break:
and not (((Time_in1 <= @time) and (Time_out1 >= @time)) or
((Time_in2 <= @time) and (Time_out2 >= @time)))
import datetime
df.replace(np.NaN, datetime.datetime(1900, 1, 1, 0, 0), inplace=True)

time = datetime.datetime(2015, 8, 11, 15, 0)

times = df2.query("(Time_in <= @time) and (Time_out >= @time)
      and not (((Time_in1 <= @time) and (Time_out1 >= @time)) or
      ((Time_in2 <= @time) and (Time_out2 >= @time)))")
TypeError: Cannot compare type 'Timestamp' with type 'str'