查找pandas数据帧范围内的值

时间:2018-06-06 09:33:05

标签: python pandas

我有一个数据框,并且有一个名为BOL的列。该值介于2.0和-2.0之间。我试图找到,一旦BOL值达到0,如果它在当前行之后的10行中达到1.0。并且想知道在它的值为0之后BOL达到1.0的行数。

以下是数据框:

import pandas as pd

df = pd.DataFrame({'BOL': [-1.21, -1.35, -1.1, -0.84, -0.01, 0.09, 
                           -0.45, 0.78, 1.45, 1.78, 0.33, -0.96]})

2 个答案:

答案 0 :(得分:2)

这是一种不同的方法,我们创建一个接受数组并将其转换为迭代器的函数。如果找到>=0值,它将再运行10次,寻找>=1返回True。其他False

import pandas as pd

df = pd.DataFrame({
    'BOL': [-1.21, -1.35, -1.1, -0.84, -0.01, 0.09, 
            -0.45, 0.78, 0.45, 0.78, 0.33, -0.96]
})


def findnextoccur(ar, n=10):
    it = np.nditer(ar)
    f = next(it)
    while f < 0:
        try:
            f = next(it)
        except StopIteration:
            return False
    for _ in range(n):
        try:
            f = next(it)
            if f >= 1.0:
                return True
        except StopIteration:
            return False

findnextoccur(df['BOL'])

答案 1 :(得分:1)

这是numpy的一种方式:

import numpy as np

A = df['BOL'].values

start = np.where(A>=0)[0][0]  # 5
end = np.where(A[start:]>=1)[0][0] + start  # 8

res = end - start  # 3

如果您期望结果,但可能没有有效的startend索引,那么您可以使用try / {换行{1}}:

except

然后,您可以执行简单的比较,即try: start = np.where(A>=0)[0][0] end = np.where(A[start:]>=1)[0][0] + start res = end - start except IndexError: res = np.nan