在另一个数据框范围内删除数据框中的日期

时间:2020-01-05 13:49:11

标签: python pandas

我有两个数据框。第一个包含日期,sensor_id并包含一些值。另一个包含日期sensor_id,并具有开始和结束日期时间值。

第一个数据帧是包含我正在处理的数据的数据帧。第二个是我知道数据不正确并且要根据第二个数据帧的周期删除第一个数据帧中的所有数据的时间段列表。

直到现在,我将两个数据框和过滤器“合并”在一起。但是现在数据框真的太大了,我没有足够的内存来处理它。

所以我正在寻找更好的解决方案。

我的拳头df:

     sensor_id       date           value
        8         2016-03-30         0
        8         2016-03-31         2
        8         2016-03-31         4
        8         2016-03-31         6
        8         2016-03-31         0

警报列表:

 sensor_id     status  __start__    __end__
       119  RECOVERED 2019-02-26 2019-02-26
       112  RECOVERED 2019-02-26 2019-02-26
        38  RECOVERED 2019-02-26 2019-02-26
         8  RECOVERED 2016-03-25 2016-03-30
       123  RECOVERED 2019-02-26 2019-02-26

最终df:

     sensor_id       date           value
        8         2016-03-31         2
        8         2016-03-31         4
        8         2016-03-31         6
        8         2016-03-31         0

因为我进入了警报列表,因此该sensor_id的期限为2016年3月25日至2016年3月30日,所以我想在最终df中删除2016年3月25日至2016年3月之间的数据30。

我不想遍历第二个df来从第一个df中删除数据。

希望这很清楚。许多帮助。

1 个答案:

答案 0 :(得分:1)

我们可以先merge

df=df1.merge(df2,on='sensor_id').query('date>__end__ or date <__start__')
   sensor_id        date  value     status   __start__     __end__
1          8  2016-03-31      2  RECOVERED  2016-03-25  2016-03-30
2          8  2016-03-31      4  RECOVERED  2016-03-25  2016-03-30
3          8  2016-03-31      6  RECOVERED  2016-03-25  2016-03-30
4          8  2016-03-31      0  RECOVERED  2016-03-25  2016-03-30