从列中删除不在范围内的日期

时间:2017-12-13 08:39:53

标签: python pandas date datetime dataframe

我有两个从Excel中导入的Panda DataFrames(df1和df2)。 Df1表示替换日期,由带有Dates的列和带有Notes(200行)的列组成。 Df2表示执行检查的日期(40行)。

我想过滤df1(或生成一个新表(df1')),df1的所有日期与df2的日期相差不到5天,将在df1中删除。

执行检查时,我们可以说该组件未在10天内更换。

e.g。

df1
22/04/2017
23/04/2017
07/06/2017
20/08/2017

df2 
21/04/2017

df1' 
07/06/2017
20/08/2017

1 个答案:

答案 0 :(得分:2)

您可以使用numpy广播执行日期时间减法,并相应地过滤df1

df1
           A
0 2017-04-22
1 2017-04-23
2 2017-07-06
3 2017-08-20

df2 
           A
0 2017-04-21

df1.A = pd.to_datetime(df1.A)    # convert to datetime first  
df2.A = pd.to_datetime(df2.A)  
df1[((df1.values[:, None] - df2.values) / pd.Timedelta(days=1) > 5).all(1)]

           A
2 2017-07-06
3 2017-08-20

对于您的数据,这将在广播减法上生成8000元素,这当然是可管理的。虽然注意很多更大的数据,但这会导致内存爆炸(高性能的价格折衷)。