我有一个数据框,并且有一个名为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]})
答案 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
如果您期望结果,但可能没有有效的start
或end
索引,那么您可以使用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
。