Я тонко понимаю, как подбирать очки. Вы можете использовать groupby
для создания групп в зависимости от изменений знаков значений ряда.
Для дифференциации групп вы можете использовать Series.shift
+ Series.cumsum
. Я оставляю деталь результата ряда, который используется для формирования групп.
Затем я создал функцию для получения значений в соответствии с критериями, которые, я думаю, вам нужныпринять и был применен через groupby.apply
.
import matplotlib.pyplot as plt
%matplotlib inline
my_serie=pd.Series([0, -1, -1,-1 , 2, -3, 1, 2, 3, 4, 5, 4, 3, -1, 2,8,11],time_serie)
#creating Serie to plot
def get_value(x):
if len(x)>=3:
return x.iloc[2]
elif len(x)>=2:
return x.iloc[1]
else:
return x.iloc[0]
groups=((my_serie.shift()*my_serie)<1).cumsum()
serie_to_plot=my_serie.groupby(groups).apply(get_value)
#tuple of Serie to plot
s_tuple=(*zip(serie_to_plot,serie_to_plot.index),)
#Show the serie an tuple
print(s_tuple)
print('-'*50)
print(serie_to_plot)
((0, 0), (-1, 1), (2, 2), (-3, 3), (3, 4), (-1, 5), (11, 6))
--------------------------------------------------
0 0
1 -1
2 2
3 -3
4 3
5 -1
6 11
dtype: int64
#Creating figure
plt.figure()
serie_to_plot.plot(figsize=(10,10))
plt.figure()
serie_to_plot.plot(kind='bar',figsize=(10,10))
Выходные изображения:
Деталь
groups
2019-10-18 18:00:00 0
2019-10-18 18:00:01 1
2019-10-18 18:00:02 1
2019-10-18 18:00:03 1
2019-10-18 18:00:04 2
2019-10-18 18:00:05 3
2019-10-18 18:00:06 4
2019-10-18 18:00:07 4
2019-10-18 18:00:08 4
2019-10-18 18:00:09 4
2019-10-18 18:00:10 4
2019-10-18 18:00:11 4
2019-10-18 18:00:12 4
2019-10-18 18:00:13 5
2019-10-18 18:00:14 6
2019-10-18 18:00:15 6
2019-10-18 18:00:16 6
dtype: int64
Другие цифры:
#Creating figure
plt.figure()
serie_to_plot.plot(figsize=(10,10))
serie_to_plot.plot(kind='bar',figsize=(10,10))