我有两个数据框。第一个包含日期,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中删除数据。
希望这很清楚。许多帮助。
答案 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