Numpy或pandas:测试是否在数组/系列中达到了上限或下限,并且首先达到了

时间:2016-06-16 16:17:50

标签: python numpy pandas

我有一个熊猫系列。

我需要检查系列中是否达到了下限或上限。

如果达到下限和上限,我需要知道首先达到

我可以使用.max().min()函数来确定是否已达到其中一个边界:

def upper_bound_reached(series, upper_bound):
    return series.max() >= upper_bound

def lower_bound_reached(series, lower_bound):
    return series.min() <= lower_bound

我遇到的问题是先解决问题

if upper_bound_reached(series, ub) and lower_bound_reached(series, lb):
    # work out which bound is reached first

实现这一目标的最惯用方法是什么?

一些图表显示了我正在寻找的内容:

未达到约束 - 返回NONE:

no bound hit

只达到上限 - 返回UPPER:

upper bound hit first

达到两个边界,首先是下限 - 返回LOWER:

lower bound hit first

1 个答案:

答案 0 :(得分:2)

s = pd.Series(np.sin(np.arange(0, 7, .1)))
upper_bound = 0.5
lower_bound = -0.5

filtered = s[(s >= upper_bound) | (s <= lower_bound)]

first_crossing = None
if not filtered.empty:
    first_crossing = 'UPPER' if filtered.index[0] >= upper_bound else 'LOWER'

>>> first_crossing
'UPPER'