這是一些將生成一些隨機數據的代碼,以及代表第 30 和第 90 百分位數的圖表和線條。import pandas as pd import numpy as np from numpy.random import randint import matplotlib.pyplot as plt %matplotlib inlinenp.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()輸出:(減去圖表中突出顯示的部分)我試圖弄清楚是否可以計算從綠色到紅線到達(突出顯示的黃色)數據所需的時間。我可以手動輸入數據:minStart = df.loc[df['Random_Number'] < 18].index[0]maxStart = df.loc[df['Random_Number'] > 90].index[0]hours = maxStart - minStarthours這將輸出: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 - minStarthours這將拋出一個ValueError: Can only compare identically-labeled Series objects有沒有更好的發瘋方法?理想情況下,創建某種算法可以計算從第 30 到第 90 個百分位然后從第 90 到第 30 位返回所需的增量時間,這將是很好的。但我可能需要考慮一下如何實現完成..
1 回答

慕萊塢森
TA貢獻1810條經驗 獲得超4個贊
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 不返回數字,因此您需要獲取它的第一個條目
添加回答
舉報
0/150
提交
取消