我有两个不同的数据框,如下所示:
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.from和df2.to中包含df1.time的df1中的所有单元格。
if df1.time > df2.from and df2.time < df2.to
delete
我该如何进行?
谢谢
答案 0 :(得分:1)
假设您的第一个数据帧始于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