查找最长的段

时间:2019-05-02 20:02:29

标签: pandas

我有一个以时间戳(以秒为单位)索引的测量电压(以V为单位)的数据帧(或一系列)。我想知道电压大于阈值的最长段(连续值)的持续时间。

示例:

time voltage
0.0  1.2
0.1  1.8
0.2  2.2
0.3  2.3
0.4  1.9
0.5  1.5
0.6  2.1
0.7  2.3
0.8  2.2
0.9  1.9
1.0  1.6

在此示例中,阈值为2.0 V,所需的答案为0.3秒

实际数据由10k或更多的样本组成,高于阈值的值的段数完全是随机的,甚至可能只包含一个带所有值都高于阈值的段。 我认为第一步也要确定这些细分并将其分开,然后进行持续时间的计算。

2 个答案:

答案 0 :(得分:1)

IIUC

n=2
s=df.voltage.gt(n)
df.time[s].groupby((~s).cumsum()).diff().sum()
Out[1218]: 0.30000000000000004

如果需要最长的持续时间,请注意此处的范围是0.6到0.8,应该是0.2秒。.

df.time[s].groupby((~s).cumsum()).apply(lambda x : x.diff().sum()).max()
Out[1221]: 0.20000000000000007

答案 1 :(得分:1)

您可以使用布尔索引创建TrueFalse序列。然后使用value_countsmax获得最长的序列:

s = df.voltage > 2

(~s).cumsum()[s].value_counts().max()

输出

3