[英]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.