我有一个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的值并不总是存在的。我尝试在一个循环(逐行)中执行上述操作,以便可以测试值的存在与否,并在值存在时运行布尔查询。但它的效率极低,而且可能需要几天时间来完成(!)。在
如果任何人有任何漂亮有效的建议,我将永远感激!在
如果我理解您的例子,您想过滤在给定时间}和{}之间)。在
time
某个东西是否有某种中断?(在11am
和12am
之间,或{所以,另一个逻辑是:
^{1}$如果现在假设没有
^{pr2}$Time_in1/Time_out1
的某个/某人没有中断,可以用查询之外的日期时间替换空字符串(或NaNs
),例如:您可以在这里使用任何类型的比较(我就像
query
方法一样),但是解决问题的方法是用过去的datetimes
替换丢失的逻辑,从而消除错误。在
相关问题 更多 >
编程相关推荐