Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中查找范围中的值_Python_Pandas - Fatal编程技术网

Python 在数据帧中查找范围中的值

Python 在数据帧中查找范围中的值,python,pandas,Python,Pandas,我有一个数据框和一个名为BOL的列。此值介于2.0和-2.0之间。我试图找到,一旦BOL值达到0,在当前行之后的10行中它是否达到1.0。并想找出BOL值为0后达到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]

我有一个数据框和一个名为
BOL
的列。此值介于2.0和-2.0之间。我试图找到,一旦BOL值达到0,在当前行之后的10行中它是否达到1.0。并想找出BOL值为0后达到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]})

这是使用
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
如果您希望得到结果,但可能没有有效的
开始
结束
索引,则可以使用
尝试
/
进行换行,但
除外:

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

然后,您可以执行一个简单的比较,即
res,这里有一种不同的方法,我们创建一个函数来接受数组,并将其转换为迭代器。如果找到
>=0
值,它将再运行10次迭代,寻找
>=1
以返回
。Else
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'])
将熊猫作为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 FindNextocur(ar,n=10):
it=np.nditer(ar)
f=下一个(it)
当f<0时:
尝试:
f=下一个(it)
除停止迭代外:
返回错误
对于范围内的u(n):
尝试:
f=下一个(it)
如果f>=1.0:
返回真值
除停止迭代外:
返回错误
FindNextocur(df['BOL'])

10行中的0-->1.0应该是一次还是多次?实际上这并不重要。如果BOL在10行中最多达到0,我只是想将数字设置为新行。当然可以,但如果没有值,这将失败。@AntonvBR,是的,当然。我们确实需要OP提供更多信息。我会用
尝试
/
,除非用户希望得到结果。很好的一次性解决方案,+1。值得注意的是,我相信对于少量的迭代,即
f
0,这种方法会更好地工作。但可能会很贵。谢谢你的代码。那么,如果该行未达到10行中的1,我如何将该行添加到一个新列,如df['X10']=1或0?将值False更改为0,将值True更改为1。@DonCoder您可以:
df['X10']=int(findnexoccur(df['BOL'])