Задача состоит в подсчете событий в прерывистом временном ряду, который имеет df
, как показано ниже:
Temperature top_lim bottom_lim
Timestamp
2015-10-30 26.479969 40 25
2015-10-31 25.500000 40 25
2015-11-01 25.500000 40 25
2015-11-02 27.916858 40 25
Код
df.plot( y='Temperature', figsize=(16, 10),)
plt.axhline(y=40, color='r', linestyle='-')
plt.axhline(y=25, color='b', linestyle='-')
df['top_lim'] = 40
df['bottom_lim'] = 25
plt.fill_between(df.index, df['bottom_lim'], df['Temperature'],
where=(df['Temperature'] >= df['bottom_lim'])&(df['Temperature'] <= df['top_lim']),
facecolor='orange', alpha=0.3)
mask = (df['Temperature'] <= df['top_lim'])&(df['Temperature'] >= df['bottom_lim'])
plt.scatter(df.index[mask], df['Temperature'][mask], marker='.', color='black')
cumulated_time = df.index[mask].diff().sum()
plt.title(f'Cumulative time in range = {cumulated_time}')
plt.show()
создает график, подобный этому ![enter image description here](https://i.stack.imgur.com/Jyq1n.png)
Как отредактировать код для вычисления, для каждого всплеска :
общее количество секунд, для которого Temperature
> 40, который предпочтительно дает таблицу выглядит примерно так:
Temperature top_lim bottom_lim 49duration
Timestamp
2015-10-30 26.479969 40 25 5
2015-10-31 25.500000 40 25 3
2015-11-01 25.500000 40 25 0
2015-11-02 27.916858 40 25 4
, где 49duration
представляет количество секунд, которое Temperature
> 49 на пике?