2016-07-18 14 views
5

У меня есть PandasDataFrame, который выглядит следующим образом:Общие элементы между столбцами DataFrame

MemberID A B C D 
1   0.3 0.5 0.1 0 
2   0 0.2 0.9 0.3 
3   0.4 0.2 0.5 0.3 
4   0.1 0 0  0.7 

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

Например, пересечение столбцов A и B будет 2 (потому что MemberID 1 и 3 имеют ненулевые значения для A и B), пересечение A и C будет 2, а также (потому MemberID 1 и 3 имеют ненулевые значения для A и C).

Конечная матрица будет выглядеть следующим образом:

A B C D 
A 3 2 2 2 
B 2 3 3 2 
C 2 3 3 2 
D 2 2 2 3 

Как мы видим, она должна быть симметричной матрицей, аналогичный корреляционной матрицы, но не корреляционная матрица.

Пересечение любых двух столбцов = 0 из MemberID, имеющих ненулевые значения в обеих колонках.

Я бы сказал здесь несколько исходных кодов, но я чувствую, что будет простая функция для выполнения этой задачи, о которой я не знаю.

Вот код, чтобы создать DataFrame:

df = pd.DataFrame([[0.3, 0.5, 0.1, 0], 
        [0, 0.2, 0.9, 0.3], 
        [ 0.4, 0.2, 0.5, 0.3], 
        [ 0.1, 0, 0, 0.7]], 
        columns=list('ABCD')) 

Все указатели будут оценены. ТИА.

+0

'df.A' имеет один элемент, который равен нулю. не должен 'final.loc ['A', 'A'] == 3' – piRSquared

ответ

4

Это должно к нему:

z = (df != 0) * 1 
z.T.dot(z) 

enter image description here

+0

Сделал это, спасибо большое :) – Patthebug

Смежные вопросы