使用trigg重新采样和重塑pandas数据帧

2024-06-16 10:09:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有多个数据通道和一个触发通道的数据帧。触发通道为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是:

^{pr2}$

假设我有0.2秒的时间窗口。然后,当触发器在时间0.1秒和时间0.5秒时为1,我想提取该触发器后0.2时间窗口的y和z,并将它们放入一个具有维度的numpy3D数组中(事件的,时间窗口中的样本,通道的)。在

在本例中,两个触发事件的维度为(2,3,2),0.2秒时间窗口内的3个样本,2个通道(y,z)。在

pandas中有没有一种有效的方法来做到这一点?我现在唯一能想到的方法是循环处理trigger == 1事件。在


Tags: 数据importpandasdfasnp时间事件
1条回答
网友
1楼 · 发布于 2024-06-16 10:09:17

提取设置触发器的行索引:

idx = np.where(df.trigger)[0]

将该1D数组扩展为2D数组,其中显示要采样的所有索引(这里,每个触发器使用3个采样):

^{pr2}$

这是一个2x3阵列:

array([[1, 2, 3],
       [5, 6, 7]])

我们用它来得到最终结果:

out = df[['y', 'z']].values[samples]

这是一个2x3x2数组,每个触发器的y和z值乘以每个触发器的采样数。在

相关问题 更多 >