假设您的第一个数据帧从 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创建每个中间日期时间值,然后检查第一个数据帧的每个值是否属于这个范围:
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