【问题标题】:How to use between_time on one dataframe, referencing a second dataframe for time variables如何在一个数据帧上使用 between_time,为时间变量引用第二个数据帧
【发布时间】:2019-07-26 10:43:04
【问题描述】:

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

仅当 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

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    事实证明,上面的代码可以工作,但是 df.between_time 函数只接受时间格式的争论。因此,需要将日期转换为 Hour:Minute 格式,如下所示:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2020-03-31
      • 2014-03-22
      • 1970-01-01
      • 2020-10-09
      相关资源
      最近更新 更多