【问题标题】:Calculating rolling_std on 4 columns in python pandas to calculate a Bollinger Band?在 python pandas 的 4 列上计算 rolling_std 以计算布林带?
【发布时间】:2013-11-30 00:08:56
【问题描述】:

我刚刚开始使用 Pandas,尝试使用大型数据集轻松完成我在 excel 中所做的事情。我有选择的期货价格数据输入到 Pandas 中:

df = pd.read_csv('TData1.csv')

这给了我一个 DataFrame。数据格式如下:

Date,Time,Open,High,Low,Close,Volume,Tick Count
02/01/2013,05:01:00,1443.00,1443.75,1438.25,1440.25,20926,4652
02/01/2013,05:02:00,1440.25,1441.75,1440.00,1441.25,7261,1781
02/01/2013,05:03:00,1441.25,1443.25,1441.00,1443.25,5010,1014

现在我实际上要做的是在熊猫中计算布林带。如果我在 excel 中,我会选择 'High'、'Low'、'Open' 和 'Close' 列的整个块,例如 20 行并计算标准偏差。

我看到 pandas 有 rolling_std 函数,它可以计算滚动标准偏差,但只在一列上。如何让 Python Pandas 计算 20 个周期的“高”、“低”、“开”和“收”列的滚动标准差?

谢谢。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以在整个 DataFrame 或子集上调用 rolling_std:

    >>> pd.rolling_std(df[['high','open','close','low']], 5)
    

    像这样:

    >>> df = pd.DataFrame({'high':np.random.randint(15,25,size=10), 'close':np.random.randint(15,25,size=10), 'low':np.random.randint(15,25,size=10), 'open':np.random.randint(15,25,size=10), 'a':list('abcdefghij')})
    >>> df
       a  close  high  low  open
    0  a     16    20   18    15
    1  b     21    23   22    15
    2  c     20    23   21    23
    3  d     19    24   24    17
    4  e     23    19   20    17
    5  f     15    16   19    17
    6  g     19    24   23    19
    7  h     21    18   17    22
    8  i     22    22   17    15
    9  j     19    20   17    18
    >>> pd.rolling_std(df[['high','open','close','low']], 5)
           high      open     close       low
    0       NaN       NaN       NaN       NaN
    1       NaN       NaN       NaN       NaN
    2       NaN       NaN       NaN       NaN
    3       NaN       NaN       NaN       NaN
    4  2.167948  3.286335  2.588436  2.236068
    5  3.391165  3.033150  2.966479  1.923538
    6  3.563706  2.607681  2.863564  2.073644
    7  3.633180  2.190890  2.966479  2.880972
    8  3.193744  2.645751  3.162278  2.489980
    9  3.162278  2.588436  2.683282  2.607681
    

    【讨论】:

    • 谢谢 - 但它似乎不是我想要的。因此,使用您上面的建议,我在我的 DataFrame 中插入了一列: df.insert(6,'20SD',0) 。然后我所做的是尝试使用上述建议将滚动标准偏差放入我使用创建的新列中:df['20SD'] = rolling_std(df[['Open','High','Low' ,'Close']],20) ...这不起作用,并给出了这个以“ValueError:错误的项目数通过 1,索引意味着 4”结尾的长错误
    • 如何将 4 个值放入 1 列?可能你需要 4 列,每个开、高、收、低都有标准?
    • 我要做的是计算 4 列上所有选定值的标准偏差,而不仅仅是每个单独的列。在 excel 中,我可以只使用 STDEV(A1:D5) 来查找该选定块中所有数字的标准偏差。我想弄清楚的是如何让 pandas/python 查看回溯 20 个周期的所有开盘/高/低/收盘值并告诉我标准偏差,而不仅仅是单个列。
    • 好吧,我现在唯一能想到的就是计算每列之间的方差和协方差,然后计算标准差。我会尝试找到更优雅的解决方案..
    猜你喜欢
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多