计算时间序列中值超过阈值的次数

2024-04-25 17:45:30 发布

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

我有一个多项式特征的时间序列数据多次超过上下限

我想数一数超过上限和下限的次数。在

例如,我的上限是35°C,下限是-45°C

如何编写一个函数来计算数据超过上下限阈值的次数以及数据在范围内的时间?在

有没有一种Python式的方法来解决这个问题?在


Tags: 数据方法函数时间序列阈值特征次数
2条回答

我认为需要^{}作为布尔掩码,将其~和{}的True反转:

print ((~df['data'].between(-45, 35)).sum())

样本

^{pr2}$

详细信息

print (df['data'].between(-45, 35))
0    False
1     True
2     True
3     True
4    False
Name: data, dtype: bool

print (~df['data'].between(-45, 35))
0     True
1    False
2    False
3    False
4     True
Name: data, dtype: bool

如果数据可以包含高于、低于或介于阈值之间的连续值的“运行”,并且您希望计数运行而不是单个数据点,则可以标记数据、折叠连续标签、过滤和计数:

In [64]: df = pd.DataFrame({'Temp': [50, 47.7, 45, 0, 0, -1, -1, -2, -10, -30,
    ...:                             -45, -45, -46, -20, -1, 2, 2, 10, 10, 20,
    ...:                             35.5, 35, 36, 20, 0, -10, -45.1, -50]})

创建标签:

^{pr2}$

然后使用^{}到{a2}:

In [69]: df[df['Category'].shift() != df['Category']]
Out[69]: 
    Temp  Category
0   50.0         1
3    0.0         0
10 -45.0        -1
13 -20.0         0
20  35.5         1
23  20.0         0
26 -45.1        -1

从这里可以很容易地根据类别进行筛选和计数:

In [70]: collapsed = df[df['Category'].shift() != df['Category']]

In [71]: (collapsed['Category'] != 0).sum()
Out[71]: 4

In [72]: (collapsed['Category'] == 0).sum()
Out[72]: 3

^{}也可能有用:

In [73]: collapsed['Category'].value_counts()
Out[73]: 
 0    3
-1    2
 1    2
Name: Category, dtype: int64

How do I write a function which ... the time when the data was in range?

如果您有时间序列数据,很容易再次移动折叠的数据以计算运行持续时间(此处使用整数索引演示):

In [74]: fake_time_series = collapsed.reset_index()

In [75]: fake_time_series
Out[75]: 
   index  Temp  Category
0      0  50.0         1
1      3   0.0         0
2     10 -45.0        -1
3     13 -20.0         0
4     20  35.5         1
5     23  20.0         0
6     26 -45.1        -1

In [76]: fake_time_series.shift(-1)['index'] - fake_time_series['index']
Out[76]: 
0    3.0
1    7.0
2    3.0
3    7.0
4    3.0
5    3.0
6    NaN
Name: index, dtype: float64

相关问题 更多 >