确定一个值是否超过另一个值的函数

时间:2018-08-02 15:06:42

标签: python python-3.x pandas function numpy

我正在处理数据框中的一些数据,发现自己正在编写包含很多内容的代码:

def entry_signal(y):
    conditions1 = [np.logical_and(y > 0, y.shift(1) < 0),np.logical_and(y < 0, y.shift(1) > 0)]
    values1 = ['LongEntry','ShortEntry']
    return np.select(conditions1, values1, '')

基本上,如果该值超过0并且先前的值小于0,则该值应为true。

我试图创建一个执行此操作的函数,但不断出现错误:

def cross_above(x,y):
    if np.logical_and(x>y, x.shift(1)<y):
        return True
    else:
        return False

然后我尝试在这里使用它:

def entry_signal(y):
    conditions1 = [cross_above((y,0), y.shift(1) < 0),np.logical_and(y < 0, y.shift(1) > 0)]
    values1 = ['LongEntry','ShortEntry']
    return np.select(conditions1, values1, '')

但是我一直在获得系列价值的真相是模棱两可的。我在做什么错了?

1 个答案:

答案 0 :(得分:1)

这是工作吗?

import numpy as np

def cross_above(x, threshold):
    x = np.asarray(x)
    return np.any( np.logical_and( x[1:]>threshold, x[:-1]<threshold) )

cross_above([1, 2, 3], 1.8) # True
cross_above([3, 2, 1], 1.2) # False
cross_above([3, 2, 1], 0.2) # False