pandas рассчитать время дельты - PullRequest
0 голосов
/ 13 февраля 2020

Вот код, который генерирует случайные данные, и диаграмма плюс линии, представляющие 30-й и 90-й процентили.

import pandas as pd 
import numpy as np 
from numpy.random import randint 
import matplotlib.pyplot as plt                                                                                                                                                       
%matplotlib inline

np.random.seed(10)  # added for reproductibility                                                                                                                                                                 

rng = pd.date_range('10/9/2018 00:00', periods=10, freq='1H') 
df = pd.DataFrame({'Random_Number':randint(1, 100, 10)}, index=rng)                                                                                                                   
df.plot()    

plt.axhline(df.quantile(0.3)[0], linestyle="--", color="g")                                                                                                                                                    
plt.axhline(df.quantile(0.90)[0], linestyle="--", color="r")                                                                                                                                                    

plt.show()

Выходы: (минус выделенная часть диаграммы)

enter image description here

Я пытаюсь выяснить, возможно ли рассчитать время, необходимое для достижения данных (выделено желтым цветом) от зеленой до красной линии.

Я могу вручную ввести данные:

minStart = df.loc[df['Random_Number'] < 18].index[0]

maxStart = df.loc[df['Random_Number'] > 90].index[0]

hours = maxStart - minStart
hours

Что будет выводить:

Timedelta('0 days 05:00:00')

Но если я попытаюсь использовать:

minStart = df.loc[df['Random_Number'] < df.quantile(0.3)].index[0]

maxStart = df.loc[df['Random_Number'] > df.quantile(0.90)].index[0]

hours = maxStart - minStart
hours

Это приведет к an ValueError: Can only compare identically-labeled Series objects

Есть ли лучший способ для безумия? В идеале было бы неплохо создать какой-то алгоритм, который может вычислять дельта-время, которое для него составляет go с 30-го по 90-й процентиль, а затем обратно с 90-го по 30-й. Но, возможно, мне придется подумать о том, как это может быть достигнуто ..

1 Ответ

0 голосов
/ 13 февраля 2020
minStart = df.loc[df['Random_Number'] < df.quantile(0.3)[0]].index[0]

maxStart = df.loc[df['Random_Number'] > df.quantile(0.90)[0]].index[0]

hours = maxStart - minStart
hours

df.quantile не возвращает число, поэтому вам нужно получить его первую запись

...