自定义楼层/天花板,对时间序列数据Python有重要意义

时间:2017-03-13 12:14:48

标签: python numpy time-series

我一直致力于一个使用时间序列进行计算的项目。

我希望获得数据的底层和Celing(类似于Excel的FLOOR和CEILING中的整个列

我检查了自定义numpy函数,但看不到包含显着性级别的任何内容

我定义了自定义函数

def ceil(x, s):
    return s * math.ceil(float(x)/s)

def floor(x, s):
    return s * math.floor(float(x)/s)

但是我无法在整个列上同时使用它们

因此我需要单独迭代每一行:

    for i in symbols:
    symbols[i]['PutStrike']=0
    symbols[i]['CallStrike']=0      

    for counter in range(0,len(symbols[0])):
        symbols[i]['PutStrike'][counter]=floor(symbols[i]['FUT'][counter],Strike_Diff[i])
        symbols[i]['CallStrike'][counter]=ceil(symbols[i]['FUT'][counter],Strike_Diff[i])

     return symbols  

当然,这不是正确的方法,而且耗费时间

我想要的是这样的:

def CalculateIV(symbols):
    for i in symbols:

        symbols[i]['PutStrike']=0
        symbols[i]['CallStrike']=0       
        symbols[i]['PutStrike']=floor(symbols[i]['FUT'],Strike_Diff[i])
        symbols[i]['CallStrike']=ceil(symbols[i]['FUT'],Strike_Diff[i])

    return symbols  

然而,当我跑步时,我得到:

 CalculateIV(abc)
 Traceback (most recent call last):
 File "<ipython-input-456-599f9aa19e37>", line 1, in <module>
 CalculateIV(abc)

 File "<ipython-input-452-190c395d86ed>", line 9, in CalculateIV
 symbols[i]['PutStrike']=floor(symbols[i]['FUT'],Strike_Diff[i])

 File "<ipython-input-260-8a88fc57ddf5>", line 2, in floor
 return s * math.floor(float(x)/s)

 File "C:\Users\jay\Anaconda2\lib\site-packages\pandas\core\series.py", line     93, in wrapper
"{0}".format(str(converter)))

 TypeError: cannot convert the series to <type 'float'>

有人可以建议一种替代/更快的方法或任何可以减轻这种情况的库。

先谢谢

1 个答案:

答案 0 :(得分:0)

这比我想象的要容易得多

我必须在numpy(np.vectorize)

中使用vectorize函数
def ceil(x, s):
return s * math.ceil(float(x)/s)

def floor(x, s):
return s * math.floor(float(x)/s)

vfloor=np.vectorize(floor)
vceil=np.vectorize(ceil)

因此现在这些函数被矢量化了。

我可以立即使用它在几秒钟内处理多个数据帧。

        def CalculateIV(symbols):
           for i in symbols:

              symbols[i]['PutStrike']=0
              symbols[i]['CallStrike']=0       
              symbols[i]['PutStrike']=vfloor(symbols[i]['FUT'],Strike_Diff[i])
              symbols[i]['CallStrike']=vceil(symbols[i]['FUT'],Strike_Diff[i])

           return symbols 

如果pqr中有多个数据帧。

我可以使用下面的方法收集楼层和ceil值

output=CalculateIV(pqr)