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

标签 python pandas date datetime dataframe

我从 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/

相关文章:

python-3.x - 检查数字范围并在 pandas 数据框中的新列中写入值

python - 如何快速填充一个序列

iOS/Android 2.2 中的 Javascript 无效日期

mysql - MySQL 中的日期时间转换

python - 如何在多个 if/elif 语句中使用 while 循环?

python - 基于出现次数的 Pandas 新数据框

javascript - Selenium python slider bouton 元素不可见异常

java - 如何使用java将日期和时间发送到SQL

python - 为什么这个类不能被 JSon 序列化?

python - 如何在 tensorflow 中批量训练时限制RAM使用?