Нахождение значения в диапазоне в кадре данных панд - PullRequest
0 голосов
/ 06 июня 2018

У меня есть фрейм данных и столбец с именем BOL.Это значение находится между 2,0 и -2,0.Я пытаюсь найти, как только значение BOL достигает 0, если оно достигает 1,0 в 10 строках после текущей строки.И хотел бы выяснить, во сколько строк BOL достигает значения 1,0 после его значения 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 голосов
/ 06 июня 2018

Вот другой подход, где мы создаем функцию, которая принимает массив и превращает его в итератор.Если значение >=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'])
0 голосов
/ 06 июня 2018

Это один из способов с 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 / 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

Затем вы можете выполнить простое сравнение, то есть res <= 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...