這看起來像一個簡單的問題(和答案),但我遇到了麻煩。在熊貓市場的日常股票市場數據中尋找52周高點
問題:
我有一個數據幀熊貓全OHLC數據。我想在整個數據框中找到滾動的52周高點。
我的數據集是從雅虎。您可以提取相同的數據打倒folllowing代碼來獲得每日數據:
import pandas.io.data as web
df = web.DataReader('SPX', 'yahoo', start, end)
數據的尾巴,給出以下的輸出:
Open High Low Close Volume
Date
2016-07-15 216.779999 217.009995 215.309998 215.830002 107155400
2016-07-18 215.970001 216.600006 215.669998 216.410004 58725900
2016-07-19 215.919998 216.229996 215.630005 216.190002 54345700
2016-07-20 216.190002 217.369995 216.190002 217.089996 58159500
2016-07-21 216.960007 217.220001 215.750000 216.270004 66070000
要獲得52周新高(滾動)我可以運行以下命令:
df["52weekhigh"] = pd.rolling_max(df.High, window=200, min_periods=1)
我得到以下(部分彩色:
High 52weekhigh
Date
2016-07-15 217.009995 217.009995
2016-07-18 216.600006 217.009995
2016-07-19 216.229996 217.009995
2016-07-20 217.369995 217.369995
2016-07-21 217.220001 217.369995
這給了我52周新高的值,因爲新的高點進來,但我不是在這裏使用200的粉絲。它應該是200還是201或220(當年「有大約」200個交易日)?
我可以重新採樣數據到每週獲取值,但然後我不能輕鬆回到我原來的每日數據(或我可以嗎?)。
所以......這裏的問題:
有沒有辦法對大熊貓dataframes運行rolling_max和窗口設置爲'52周或類似的東西?如果沒有,任何人都可以想到比上述更好的方法嗎?
途徑去加倍努力,同積:) – Alex
感謝。你能幫我理解這與將窗口設置爲200(或252或356或任何其他我想要的數字)有什麼不同? –
@ EricD.Brown:'window'參數影響每個計算中包含的 *行數*。如果您的DataFrame每週只有5個工作日,則 那麼52周的窗口將完全對應於'window = 52 * 5'。但是,如果您的DataFrame 跳過一些假期(如新年),則每週可能不對應於5天的 天。通過使用'asfreq('D')'將頻率擴展到幾天,您每天會得到一行 行。所以你*保證* 52周完全符合 'window = 52 * 7'。 – unutbu