Python возвращает первый индекс, где несколько столбцов содержат желаемое значение - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть следующий пример фрейма данных:

df = pd.DataFrame({
    'seq':[0,1,2,3,4,5,6,7,8,9,10,11],
    'flag1':[np.nan,np.nan,1,1,1, 0,-1,-1,1,1,1,0],
    'flag2':[np.nan,np.nan,np.nan,0, 0,0,-1,-1,0,1, 0,1]
})

Я пытаюсь получить индекс первой строки, где значения flag1 и flag2 равны 1. В приведенном выше случае это будет 9.

Я пытался df[df.flag1 == 1.0 & df.flag2 == 1.0].index[0], но он возвращает мне ошибку. Точно так же df[df.flag1 == 1.0] & df[df.flag2 == 1.0].index[0] тоже не работает. Я попытался выполнить поиск по SO, но не смог найти решение для моей конкретной c потребности.

1 Ответ

2 голосов
/ 19 февраля 2020

В этом выражении:

df.flag1 == 1.0 & df.flag2 == 1.0

оператор & имеет наибольший приоритет, поэтому он фактически интерпретируется как:

df.flag1 == (1.0 & df.flag2) == 1.0

, что совсем не то, что вы имели в виду, и в этом случае выдает ошибку.

Добавьте круглые скобки, чтобы принудительно задать требуемый порядок оценки:

(df.flag1 == 1.0) & (df.flag2 == 1.0)

С этим изменением ваш первоначальный подход должен работать нормально.

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