[英]Pandas: rolling std deviation/mean by trading days
我試圖提取滾動標准方差,並通過使用交易數據意味着rolling_*
的功能pandas
。
我的數據如下:
Tick Trading_day Trade_price
VOD 2013-1-2 30.23
VOD 2013-1-2 30.33
VOD 2013-1-2 30.24
VOD 2013-1-5 31.23
VOD 2013-1-5 30.23
VOD 2013-1-6 30.23
VOD 2013-1-7 30.23
VOD 2013-1-8 30.23
VOD 2013-1-9 30.23
... ....... .....
RBS 2013-1-2 15.23
... ....... .....
基本上,我想根據(-3,+3)交易日計算出每只股票的平均價格和價格的標准偏差。
請注意,這里有兩個棘手的事情 :
每個交易日(交易日為頻繁交易)中有多種交易 。
那些是交易日( 不是日歷日 ),因此它們沒有順序。
我理想的輸出是
Tick Trading_day mean_price std_price
VOD 2013-1-2 30.23 0.13
VOD 2013-1-5 30.11 0.09
VOD 2013-1-6 30.24 0.15
... ..... ....... .....
RBS 2013-1-2 15.23 0.19
有人知道嗎? 提前致謝 !
這是我在此示例中使用的數據:
df = pd.DataFrame({'Tick': ['VOD'] * 7 + ['RBS'] * 2,
'Trade_price': [30.23, 30.24, 31.23, 30.23, 30.23, 30.23, 30.23, 14.11, 15.23],
'Trading_day': ['1/2/13', '1/2/13', '1/5/13', '1/5/13', '1/6/13', '1/7/13', '1/8/13', '1/2/13', '1/5/13']})
首先,讓我們使用.to_datetime()
並將日期列設置為熊貓的時間戳(如果尚未添加)。
df['Trading_day'] = pd.to_datetime(df.Trading_day)
接下來,對數據進行分組和轉換,以便我們獲取任何給定日期每一報價的平均價格,並且該日期在索引中是唯一的:
df = df.groupby(['Trading_day', 'Tick']).Trade_price.mean().unstack()
>>> df
Tick RBS VOD
Trading_day
2013-01-02 14.11 30.235
2013-01-05 15.23 30.730
2013-01-06 NaN 30.230
2013-01-07 NaN 30.230
2013-01-08 NaN 30.230
現在,您要“根據(-3,+3)個交易日計算出每只股票的平均價格和價格的標准差”。 一種方法是使用pd.rolling_mean()
並將結果居中。 給定有限的數據集,我正在使用3天居中窗口(即前一天,當前日期和第二天)。 您將需要使用7天的時間來獲得+/- 3個交易日。
>>> pd.rolling_mean(df, 3, center=True)
Tick RBS VOD
Trading_day
2013-01-02 NaN NaN
2013-01-05 NaN 30.398333
2013-01-06 NaN 30.396667
2013-01-07 NaN 30.230000
2013-01-08 NaN NaN
要獲得滾動標准偏差,只需使用pd.rolling_std()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.