2017-07-03 129 views
1

我正在尋找一種方法來查找滾動框架中的兩個最大高點並計算斜率以推斷可能的第三高點。熊貓發現兩個滾動最大高點並計算斜率

我有這個問題:) a)如何找到第二高? b)如何知道兩個高點的位置(對於一個簡單的斜率:斜率=(MaxHigh2-MaxHigh1)/(PosMaxHigh2-PosMaxHigh1))?

我當然可以做這樣的事情。但我只工作,如果high1> high2 :) 和我不會有相同的範圍的高點。

import quandl 
import pandas as pd 
import numpy as np 
import sys 


df = quandl.get("WIKI/GOOGL") 
df = df.ix[:10, ['High', 'Close' ]] 

df['MAX_HIGH_3P'] = df['High'].rolling(window=3,center=False).max() 
df['MAX_HIGH_5P'] = df['High'].rolling(window=5,center=False).max() 

df['SLOPE'] = (df['MAX_HIGH_5P']-df['MAX_HIGH_3P'])/(5-3) 

print(df.head(20).to_string()) 
+0

「兩個最大高度」似乎非常不適應。您必須定義它在您的環境中的含義,因爲這沒有一般意義。 –

+0

@ B.M。抱歉。我需要最高和第二高:) – Ele

回答

1

對不起有點混亂解決方案,但希望它有助於:

第一I定義一個函數,它接受作爲輸入numpy的陣列,檢查是否至少2個元素不爲空,然後計算斜率(根據您的公式 - 我認爲),看起來是這樣的:

def calc_slope(input_list): 
    if sum(~np.isnan(x) for x in input_list) < 2: 
     return np.NaN 
    temp_list = input_list[:] 
    max_value = np.nanmax(temp_list) 
    max_index = np.where(input_list == max_value)[0][0] 
    temp_list = np.delete(temp_list, max_index) 
    second_max = np.nanmax(temp_list) 
    second_max_index = np.where(input_list == second_max)[0][0] 
    return (max_value - second_max)/(1.0*max_index-second_max_index) 
變量DF

我有這樣的:

enter image description here

而你只需要申請滾動窗口任何你喜歡的,例如,在應用到「高」:

df['High'].rolling(window=5, min_periods=2, center=False).apply(lambda x: calc_slope(x)) 

最終結果是這樣的:

enter image description here

你也可以將其存儲在另一欄中,如果你喜歡:

df['High_slope'] = df['High'].rolling(window=5, min_periods=2, center=False).apply(lambda x: calc_slope(x)) 

這就是你想要的嗎?

+0

正是我所需要的。不,我需要一些時間來了解你做了什麼!謝謝! E. – Ele