我有一个数据框,其中包含一组指令,包括开始时间和结束时间。我有第二个日期框架,还有另一个指令集,距时间只有一个时间。
如果timefrom不在第一个df中的时间之间,则仅包含第二个数据帧中的指令。从本质上讲,第一个数据帧时间优先。
我想引用这些数据帧,并在第二个数据帧中丢弃由第一个数据帧替代的时间。
此代码循环遍历与不同计算机关联的许多数据帧。
我一直在使用df.iat和df.between_time的组合,但是没有运气。
我也按照以下链接尝试了.loc,但是当从一个单独的数据框中引用开始时间和结束时间时,它似乎不起作用。 calculate if date value occurs between two different times python pandas
df=
timeFrom timeTo
1. 2013-10-09 05:28:00 2013-10-10 05:31:00
2. 2013-10-09 05:53:00 2013-10-10 06:01:00
3. 2013-10-09 05:56:00 2013-10-10 06:03:00
df2 = timeFrom x
1. 2013-10-09 05:30:00 2100
2. 2013-10-09 05:43:00 5
3. 2013-10-09 05:55:00 50
df2 = df2.set_index(pd.DatetimeIndex(df2["timeFrom"]))
for i in range(1, len(df)):
start = df.iat[i, 2]
end = df.iat[i, 3]
df2 = df2.drop(df2.between_time(start, end).index)
我希望df2返回唯一需要处理的指令。在这种情况下:
2. 2013-10-09 05:43:00 5
但是当前代码导致:
ValueError: Cannot convert arg ['2019-05-01 05:28:00'] to a time
答案 0 :(得分:0)
事实证明,上面的代码有效,但是df.between_time函数仅接受时间格式的争论。因此,日期需要转换为“小时:分钟”格式,如下所示:
start_time = dt.strptime(start, '%Y-%m-%d %H:%M:%S').strftime("%H:%M")
下面的完整代码:
for i in range(1, len(df)):
start = df.iat[i, 1]
end = df.iat[i, 2]
if start > BeginTime and end < EndTime:
start_time = dt.strptime(start, '%Y-%m-%d %H:%M:%S').strftime("%H:%M")
end_time = dt.strptime(end, '%Y-%m-%d %H:%M:%S').strftime("%H:%M")
df2 = df2.drop(df2.between_time(start_time, end_time).index)