我有两个从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
答案 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
元素,这当然是可管理的。虽然注意很多更大的数据,但这会导致内存爆炸(高性能的价格折衷)。