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

2024-06-26 00:00:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

时间上午9点

暂停时间=下午5点

时间1=上午11点

外出时间1=12点

时间2=下午3点

外出时间2=4点

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

time>;=进入时间,time<;=暂停时间

以及

time<;=time_in1和time>;=time_out 1

以及

time<;=time_in2和time>;=time_out 2

第一部分的工作原理如下:

df['wearing_time'] = ((df['time']>=flmerge.Time_in) & (df['time']<=df.Time_out))

我相信这是有效的,因为没有空白值。在

但是,我尝试了以下方法,但没有成功:

^{pr2}$

以及:

df['wearing_time'] = ((df['time']>=dfe.Time_in) & (df['time']<=df.Time_in1) & (df['time']>=df.Time_out1) & (df['time']<=df.Time_in2) & (flmerge['time']>=df.Time_out2) & (df['time']<=df.Time_out))

给出以下错误:

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

我认为问题在于,Time_in1/Time_in2或Time_out1/Time_out2的值并不总是存在的。我尝试在一个循环(逐行)中执行上述操作,以便可以测试值的存在与否,并在值存在时运行布尔查询。但它的效率极低,而且可能需要几天时间来完成(!)。在

如果任何人有任何漂亮有效的建议,我将永远感激!在


Tags: inltgtdftime格式时间out
1条回答
网友
1楼 · 发布于 2024-06-26 00:00:00

如果我理解您的例子,您想过滤在给定时间time某个东西是否有某种中断?(在11am12am之间,或{}和{}之间)。在

所以,另一个逻辑是:

^{1}$

如果现在假设没有Time_in1/Time_out1的某个/某人没有中断,可以用查询之外的日期时间替换空字符串(或NaNs),例如:

^{pr2}$

您可以在这里使用任何类型的比较(我就像query方法一样),但是解决问题的方法是用过去的datetimes替换丢失的逻辑,从而消除

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

错误。在

相关问题 更多 >