查找pandas.Series中的值何时越过/达到阈值

时间:2015-07-08 10:47:03

标签: python pandas

考虑以下系列

s = pd.Series([0,1,2,3,4,1,5,4,3,2,1])

是否有一种简单的方法可以知道达到/超过2值的次数(没有明显的迭代解决方案)?

上述示例的预期结果应为4(系列中的2行向上或向下划分4次)。

编辑:更新了示例案例

1 个答案:

答案 0 :(得分:5)

使用Series.shift method可以轻松实现这一点。因为你只需要向前看就知道数字是否已经越过。

s = pd.Series([0,1,2,3,4,1,5,4,3,2,1])
df = pd.DataFrame({'s':s})
df['next_s'] = df.s.shift(-1)
line = 2

df
    s  next_s
0   0       1
1   1       2
2   2       3
3   3       4
4   4       1
5   1       5
6   5       4
7   4       3
8   3       2
9   2       1
10  1     NaN

现在您可以使用简单的可向量化条件语句

df['cross'] = (
    ((df.s >= line) & (df.next_s < line)) |
    ((df.next_s > line) & (df.s <= line)) |
    (df.s == line))

df
    s  next_s  cross
0   0       1  False
1   1       2  False
2   2       3   True
3   3       4  False
4   4       1   True
5   1       5   True
6   5       4  False
7   4       3  False
8   3       2  False
9   2       1   True
10  1     NaN  False

现在很容易总结布尔值来计算:

df.cross.sum()
4