【发布时间】:2018-01-28 18:52:20
【问题描述】:
我有一个包含多个数据通道和一个触发通道的数据帧。触发通道为 0 或 1。事件发生时为 1。
我想检测事件的开始 (trigger == 1) 并在数据帧中采样数据通道,这样我只能在事件触发后获得指定的时间量。
举个具体的例子,考虑一下:
import numpy as np
import pandas as pd
np.random.seed(0)
# time in seconds
t = np.arange(10)*0.1
# data channels and trigger
d = dict(y=np.random.randn(10),
z=np.random.randn(10),
trigger=[0, 1, 0, 0, 0, 1, 0, 0, 0, 0])
df = pd.DataFrame(d, index=t)
所以df 是:
trigger y z
0.0 0 1.764052 0.144044
0.1 1 0.400157 1.454274
0.2 0 0.978738 0.761038
0.3 0 2.240893 0.121675
0.4 0 1.867558 0.443863
0.5 1 -0.977278 0.333674
0.6 0 0.950088 1.494079
0.7 0 -0.151357 -0.205158
0.8 0 -0.103219 0.313068
0.9 0 0.410599 -0.854096
假设我有 0.2 秒的时间窗口。然后,当触发器在时间 0.1 秒和时间 0.5 秒时为 1 时,我想在此触发器之后在 0.2 的时间窗口中提取 y 和 z 并将它们放入具有维度的 numpy 3D 数组(事件数,样本时间窗口,通道数)。
在此示例中,两个触发事件、0.2 秒时间窗口内的 3 个样本和 2 个通道 (y,z) 的维度将为 (2, 3, 2)。
pandas 中是否有有效的方法来执行此操作?我现在能想到的唯一方法是循环 trigger == 1 事件。
【问题讨论】:
-
时间戳是否总是像您的示例一样均匀分布?
-
是的,这可以假设为真的。