如何在一个数据帧上使用between_time,如何在第二个数据帧上引用时间变量

时间:2019-07-26 10:43:04

标签: python pandas

我有一个数据框,其中包含一组指令,包括开始时间和结束时间。我有第二个日期框架,还有另一个指令集,距时间只有一个时间。

如果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

1 个答案:

答案 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)