Pandas: проверьте, существует ли строка с определенными значениями
У меня есть двухмерные (или более) панды DataFrame:
>>> import pandas as pd
>>> df = pd.DataFrame([[0,1],[2,3],[4,5]], columns=['A', 'B'])
>>> df
A B
0 0 1
1 2 3
2 4 5
Теперь предположим, что у меня есть массив numpy, такой как np.array([2,3])
и хочу проверить, есть ли какая-либо строка в df
, соответствующая содержимому моего массива. Здесь ответ должен быть правдивым, но, например. np.array([1,2])
должен возвращать значение false, поскольку в столбце A и 2 в столбце B.
Конечно, это легко, но не вижу его прямо сейчас.
Ответы
Ответ 1
Оказывается, это действительно легко, здесь работает следующая работа:
>>> ((df['A'] == 2) & (df['B'] == 3)).any()
True
>>> ((df['A'] == 1) & (df['B'] == 2)).any()
False
Может быть, кто-то придумает лучшее решение, которое позволяет напрямую проходить в массиве и список столбцов для соответствия.
Обратите внимание, что скобка вокруг df['A'] == 2
не является необязательной, так как оператор &
так же силен, как и оператор ==
.
Ответ 2
проще:
a = np.array([2,3])
(df == a).all(1).any()
Ответ 3
Если вы также хотите вернуть индекс, в котором встречались совпадения:
index_list = df[(df['A'] == 2)&(df['B'] == 3)].index.tolist()