2017-10-21 15 views
1

Je cherche de l'aide pour créer une sous-trame à partir d'une structure de données existante en utilisant une fonction de type sumproduct. Je veux convertir cette table, dans un petit produit de somme en utilisant les en-têtes de colonne:python pandas crosstab sumproduct matrice carrée

dan ste bob 
t1 0 2 0 
t2 2 0 1 
t3 2 1 0 
t4 1 0 2 
t5 0 1 2 

rubrique colonne devenir indice et produit de la somme est la valeur:

dan ste bob 
dan 9 2 4 
ste 2 6 2 
bob 4 2 9 

dan x dan = 9 (0 * 0) + (2 * 2) + (2 * 2) + (1 * 1) + (0 * 0)

Merci d'avance!

+1

idk. Je pense que vous utilisez simplement la méthode 'DataFrame.dot()' pour faire une multiplication matricielle – 0TTT0

Répondre

2

Vous pouvez utiliser le dot avec sa transposition:

In [11]: df.T.dot(df) 
Out[11]: 
    dan ste bob 
dan 9 2 4 
ste 2 6 2 
bob 4 2 9 
0

Vous devriez en utilisant ce .dot est juste pour le plaisir

df1=pd.DataFrame(index=df.columns,columns=df.columns) 
df1.apply(lambda x : [sum(df[x.name]*df[y]) for y in x.index]) 
Out[65]: 
    dan ste bob 
dan 9 2 4 
ste 2 6 2 
bob 4 2 9