Как получить в Python номера строк и столбцов элементов в матрице, которые соответствуют определенному значению? - PullRequest
1 голос
/ 14 июня 2019

Проблема на самом деле очень проста, но я не могу перевести ее на Python, потому что я новичок в этом языке.

У меня есть фрейм данных с булевыми значениями "True" и "False" иМне нужен список координат ложных элементов:

Мне нужно сделать это на серии матриц, которые генерируются автоматически с различным числом строк и столбцов, но всегда с логическими значениями.

Например, у меня есть такая матрица:

    0       1       2
0   TRUE    FALSE   FALSE
1   TRUE    FALSE   TRUE
2   TRUE    TRUE    TRUE
3   FALSE   TRUE    TRUE
4   TRUE    TRUE    TRUE
5   TRUE    TRUE    TRUE
6   TRUE    TRUE    TRUE
7   TRUE    TRUE    TRUE
8   TRUE    TRUE    TRUE

И я ищу, чтобы получить список вроде [(0,1), (0,2), (1,1),(3,0)]

Я пытался решить эту проблему с пандами (поэтому рассматриваем матрицу как объект "pd.DataFrame") и numpy, но я новичок в языке и не могупохоже, понимают, как работают функции, и правильно их используют.

Ответы [ 2 ]

2 голосов
/ 14 июня 2019

Вы можете сложить фрейм данных и использовать логическое индексирование:

t=df.stack()
t[~t].index.values

Выход:

array([(0, 1), (0, 2), (1, 1), (3, 0)], dtype=object)
1 голос
/ 14 июня 2019

Метод 1:

Использование np.argwhere

np.argwhere(~df.values )

array([[0, 1],
       [0, 2],
       [1, 1],
       [3, 0]], dtype=int64)

Метод 2:

Редактировать после @ Скотта Бостонский комментарий

Мы можем использовать np.where для этого и после этого zip два массива для получения координат:

list(zip(*np.where(~df)))

[(0, 1), (0, 2), (1, 1), (3, 0)]

Пояснение

np.where даетмы два массива, первый - индекс строки, второй - индекс столбца.

np.where(~df)

(array([0, 0, 1, 3], dtype=int64), array([1, 2, 1, 0], dtype=int64))

Итак, если мы zip из этих массивов и преобразуем его в список, мы получим желаемый результат.

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