#python-3.x #pandas #dataframe
Вопрос:
У меня есть фрейм данных , в нем x
три столбца, A, B and C
import pandas as pd X = pd.DataFrame() X['A'] = [-100, 0, 2, 3] X['B'] = [0, -100, 1, 2] X['C'] = [0, 0, 0, 1] X A B C 0 -100 0 0 1 0 -100 0 2 2 1 0 3 3 2 1
Я хотел бы найти строки, которые удовлетворяют следующему условию,
(If either column A or column B value equals to -100) OR (the column C value equals to 1)
С точки зрения приведенного выше примера, строки [0,1,3] — это то, что я хочу получить
Я попробовал вот это,
x1 = ( X[['A','B']]== -100 ) or (X['C'] == 1)
но получите следующее сообщение об ошибке, каким должен быть правильный подход?
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) ~AppDataLocalTemp/ipykernel_23048/1363478251.py in lt;modulegt; ----gt; 1 x1 = ( X[['A','B']]== -100 ) or (X['C'] == 1) ~Anaconda3envspyrolibsite-packagespandascoregeneric.py in __nonzero__(self) 1327 1328 def __nonzero__(self): -gt; 1329 raise ValueError( 1330 f"The truth value of a {type(self).__name__} is ambiguous. " 1331 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Ответ №1:
Есть 2 ошибки.
- вы не можете использовать
or
с сериями, вы должны использовать побитовое или:|
- вам нужно объединить сравнения в левой части, используя
any
nb. Я использовал A.eq(B)
для ясности, но это эквивалентно A == B
x1 = X[['A','B']].eq(-100).any(axis=1) | X['C'].eq(1)
выход:
0 True 1 True 2 False 3 True dtype: bool
нарезка рядов
чтобы выбрать соответствующие строки:
X[x1]
выход:
A B C 0 -100 0 0 1 0 -100 0 3 3 2 1