繁体   English   中英

如何比较两个不同数据框中的日期时间

[英]How to compare datetimes in two different dataframes

我有两个不同的数据框,如下所示:

time  .. ...
2019-05-01 10:50:21
2019-05-01 10:50:22
2019-05-01 10:50:23
..

和同一行中的另一个:

from  to
2019-05-01 10:50:21 2019-05-01 10:55:21

我从两个不同的.csv 导入数据帧并使用 pd.to_datetime 转换时间戳

我想删除 df1 中的所有单元格,其中 df1.time 包含在 df1.from 和 df2.to 中。

if df1.time > df2.from and df2.time < df2.to
  delete

我该如何继续?

谢谢

假设您的第一个 dataframe 开始于2019-05-01 10:50:21并结束于2019-05-01 10:55:30 让我们在这里创建两个数据框:

import pandas as pd

a = pd.date_range("2019-05-01 10:50:21", "2019-05-01 10:55:50", freq='s')
df1 = pd.DataFrame({'time': a})

df2 = pd.DataFrame({
    "from": ["2019-05-01 10:50:21", "2019-05-01 10:55:30"], 
    "to": ["2019-05-01 10:55:21", "2019-05-01 10:55:45"]}, 
    index=[0, 1]
    ).apply(lambda s: pd.to_datetime(s))

我们可以使用一个date_range来创建每个中间日期时间值,然后检查第一个 dataframe 的每个值是否属于这个范围:

dt_ranges = [pd.date_range(row['from'], row['to'], freq='s') for _, row in df2.iterrows()]
dt_rng = pd.concat([pd.Series(ix) for ix in dt_ranges])

mask = df1.isin(dt_rng.values)
filtered = df1[~mask].dropna()
print(filtered)
                   time
301 2019-05-01 10:55:22
302 2019-05-01 10:55:23
303 2019-05-01 10:55:24
304 2019-05-01 10:55:25
305 2019-05-01 10:55:26
306 2019-05-01 10:55:27
307 2019-05-01 10:55:28
308 2019-05-01 10:55:29
325 2019-05-01 10:55:46
326 2019-05-01 10:55:47
327 2019-05-01 10:55:48
328 2019-05-01 10:55:49
329 2019-05-01 10:55:50

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM