我从 Excel 中导入了两个 Panda DataFrame(df1 和 df2)。 Df1 表示替换日期,由日期列和注释列(200 行)组成。 Df2 表示执行检查的日期(40 行)。
我想过滤 df1(或生成一个新表(df1')),df1 中与 df2 日期相差不到 5 天的所有日期都将在 df1 中删除。
在执行检查时,我们可以说该组件在 10 天内没有被更换。
例如
df1
22/04/2017
23/04/2017
07/06/2017
20/08/2017
df2
21/04/2017
df1'
07/06/2017
20/08/2017
最佳答案
您可以使用 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
个元素,这当然是可以管理的。尽管注意更大的数据,但这会导致内存爆炸(高性能的代价高昂)。
关于python - 从列中删除不在范围内的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47788708/