【发布时间】:2019-10-28 20:48:45
【问题描述】:
我需要对每 5 分钟记录一次测量值 (temp) 的数据帧 (df1) 进行子集化,并以日期时间为索引。
Dataframe df2,包含有关何时发生事件的数据。 0 是事件的开始,1 是事件的结束。 df2 有一个名为 date 的列,它是相应事件的开始和结束的日期时间。所有事件的开始和结束都记录到最接近的秒数。
我想根据发生事件的时间对 df1 进行子集化,使用与 df1 中包含的相同日期时间格式(每 5 分钟一次的时间)。
在下面的示例中,在 00:07:00 和 00:14:00 之间发生了一个事件,所以我希望 df3 包含 df1['temp'] 00:05:00 和 00:10:00 . 00:41:00 到 00:44:00 之间还发生了一个事件,所以我也希望 df3 包含 00:40:00。
import numpy as np
import pandas as pd
df1 = pd.DataFrame({'temp' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]},
index=pd.date_range('2019-05-02T00:00:00', '2019-05-02T01:00:00', freq='5T'))
df2 = pd.DataFrame({'event' : [0, 1, 0, 1],
'date' : ['2019-05-02-00:07:00', '2019-05-02-00:14:00', '2019-05-02-00:41:00', '2019-05-02-00:44:00']})
df2['date'] = pd.to_datetime(df2['date'])
df3 = pd.DataFrame({'result' : [2, 3, 9],
'date' :['2019-05-02-00:05:00', '2019-05-02-00:10:00', '2019-05-02-00:40:00']})
在我的实际工作中,我有 7 个单独的 df,每个都包含不同的事件,我想对 df1 进行子集化并组合,所以我最终得到一个 df,它是 df1 中所有数据的子集,当有是其他 7 个 df 中的任何一个事件。实际上,df1 有 37 列,其中包含我想要传输到最终 df3 的数据。获得上述子集的代码后,我将合并所有子集数据并删除所有重复项。
【问题讨论】:
-
所以您想通过 df2 事件过滤 df1 但有 7 个“df2”?
-
是的,这正是我想要做的
-
here has been an event between 00:07:00 and 00:14:00, so I would like df3 to contain df1['temp'] 00:05:00 and 00:10:00.- 为什么是00:05:00? -
包含00:05:00不是必须的,如果只捕获00:10:00就可以了
-
有没有办法让代码在 5 分钟内查找任何事件?有些事件持续不到 5 分钟,在这些情况下,代码可能不包含它们?
标签: python pandas loops if-statement