熊猫:按交易日滚动std偏差/均值

时间:2015-09-17 21:43:32

标签: python pandas trading

我正在尝试使用rolling_*的{​​{1}}函数提取滚动标准偏差和交易数据的含义。

我的数据如下:

pandas

基本上,我想根据( - 3,+ 3)交易日计算每只股票的平均价格和标准差。

请注意,这里有两个棘手的事情

  1. 每个交易日有多种交易(流动日交易频繁)。

  2. 这些是交易日(不是日历日),因此它们不是按顺序排列的。

  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
    ...     .......      .....
    

    有人有想法吗?提前谢谢!

1 个答案:

答案 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()