示例:
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或更多的样本组成,高于阈值的值的段数完全是随机的,甚至可能只包含一个带所有值都高于阈值的段。 我认为第一步也要确定这些细分并将其分开,然后进行持续时间的计算。
答案 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)
您可以使用布尔索引创建True
和False
序列。然后使用value_counts
和max
获得最长的序列:
s = df.voltage > 2
(~s).cumsum()[s].value_counts().max()
输出
3