Создайте двоичную матрицу из сопоставления значений каждой строки python

У меня следующая проблема. Я хотел бы создать двоичную матрицу, которая выглядит так (извините, мне пришлось проиллюстрировать с помощью Excel)

enter image description here

из этого файла csv с одним столбцом:

enter image description here

В основном я хочу, чтобы Python читал столбец, сравнивал каждую строку, и если 2 строки имеют одинаковое значение, координата этой пары в матрице будет принимать значение 1 и 0 в противном случае.

Итак, если бы у меня было 10 строк, у меня была бы матрица 10 x 10 с диагональю, равной 1, а также верхний треугольник выглядел бы точно так же, как верхний треугольник, разделенный диагональю.

Есть ли способ сделать это в Python и Pandas / Numpy?

Большое спасибо!

скопируйте и вставьте ваш фрейм данных, а не изображения

pyd 26.10.2018 05:59
1
1
463
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый простой способ - сравнить массив с его транспонированием в двух измерениях, например:

In []:
a = np.array(['a', 'b', 'a', 'c'])
(a[:,None] == a[None,:]).astype(int)

Out[]:
array([[1, 0, 1, 0],
       [0, 1, 0, 0],
       [1, 0, 1, 0],
       [0, 0, 0, 1]])

Примечание: форма a[None,:] - это (1, 4), а a[:,None] (эквивалент a[None,:].T) - это (4, 1), таким образом, когда вы сравниваете их, вы транслируете результаты в квадратную матрицу (4, 4).

Спасибо! Я получил эту ошибку: «ValueError: можно сравнивать только объекты DataFrame с одинаковой меткой». Вы знаете, почему это так?

Ilumtics 26.10.2018 06:22

Вам нужно будет показать свой код pandas - выше это numpy.

AChampion 26.10.2018 06:23

Ах, я решил. Глупый, я забыл ".values" фрейм данных. Спасибо!

Ilumtics 26.10.2018 06:26

Другие вопросы по теме