2016-07-18 9 views
5

ich ein PandasDataFrame haben, die wie folgt aussieht:Gemeinsame Elemente zwischen den Spalten einer 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 

Ich möchte eine andere Matrix haben, die mir die Anzahl der Nicht-Null-Elemente für den Schnittpunkt jeder Spalte gibt außer MemberID.

beispielsweise der Schnittpunkt der Spalten A und B wäre 2 (weil MemberID 1 und 3 haben Nicht-Null-Werte für A und B), Schnittpunkt von A und C würden auch 2 sein (weil MemberID 1 und 3 Werte ungleich Null für A und C haben).

Die endgültige Matrix würde wie folgt aussehen:

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

Wie wir sehen können, sollte es eine symmetrische Matrix, ähnlich einer Korrelationsmatrix, aber nicht die Korrelationsmatrix sein.

Schnittpunkt von 2 Spalten = MemberID mit Werten ungleich Null in beiden Spalten.

Ich würde hier ein paar erste Code zeigen, aber ich fühle mich wie es wäre eine einfache Funktion, um diese Aufgabe zu tun, die ich nicht kenne.

Hier ist der Code die DataFrame zu erstellen:

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')) 

Alle Zeiger geschätzt werden würde. TIA.

+0

'df.A' hat ein Element, das gleich Null ist. sollte nicht 'final.loc ['A', 'A'] == 3' – piRSquared

Antwort

4

Dies sollte es an:

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

enter image description here

+0

Habe es, vielen Dank :) – Patthebug

Verwandte Themen