我正在尝试使用rolling_*
的{{1}}函数提取滚动标准偏差和交易数据的含义。
我的数据如下:
pandas
基本上,我想根据( - 3,+ 3)交易日计算每只股票的平均价格和标准差。
请注意,这里有两个棘手的事情:
每个交易日有多种交易(流动日交易频繁)。
这些是交易日(不是日历日),因此它们不是按顺序排列的。
我理想的输出是
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
... ....... .....
有人有想法吗?提前谢谢!
答案 0 :(得分:1)
以下是我在此示例中使用的数据:
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()
并将你的日期列Pandas时间戳(如果它们还没有)。
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()
。