Логический оператор Python two == не работает в итерационном фрейме данных - PullRequest
1 голос
/ 07 марта 2020

У меня есть фрейм данных, и я хотел бы выбрать две строки для интерполяции между ними с помощью самоопределяемой функции. Проблема в том, что я вижу только одну строку и не понимаю, почему мое утверждение не работает. Данные выглядят следующим образом:

        DataPoint   Rank
1       -9.360001   1.0
2       -9.080002   2.0
3       -9.039993   3.0
4       -7.529999   4.0
5       -7.479996   5.0
...     ...     ...     ...     ...

Я хотел бы интерполировать, например, между рангом 2.0 и 3.0. Код выглядит следующим образом:

Rank = data[['DataPoint']].count().values[0]*(1-0.99)
check_int = isinstance(Rank, int)
if not check_int:
        #loop 
        for ind in data.index:
            if (data['DataPoint'][ind] == (2.0 and 3.0)):
                print(data['DataPoint'][ind], data['Rank'][ind])

В качестве вывода я получаю только:

-9.03999300000001 3.0

, но не дополнительно

-9.080002 2.0

Ответы [ 2 ]

2 голосов
/ 07 марта 2020

(2.0 and 3.0) оценивается как 3.0, потому что это последнее, что нужно оценить. Вот почему ты скучаешь 2.0.

Вы можете изменить это значение на in, чтобы оно оставалось на одной строке.

if data['Rank'][ind] in (2.0, 3.0):
    ...
1 голос
/ 07 марта 2020

Попробуйте, посмотрите, работает ли он для вас:
В основном оператор (2.0 and 3.0) выбирает только строки с рангом 3.0, вам нужно вручную указать диапазон, как я делал ниже:

ank = data[['DataPoint']].count().values[0]*(1-0.99)
check_int = isinstance(Rank, int)
if not check_int:
        #loop 
        for ind in data.index: # Below line, picks ranks more than 2.0 but less than 3.0
            if (data['Rank'][ind] >= 2.0 and data['Rank'][ind] <= 3.0):
                print(data['DataPoint'][ind], data['Rank'][ind])
...