Calcul de la Distance entre les lignes de Pandas Dataframe à l'aide d'une matrice de distance
J'ai le texte suivant Pandas DataFrame:
In [31]:
import pandas as pd
sample = pd.DataFrame({'Sym1': ['a','a','a','d'],'Sym2':['a','c','b','b'],'Sym3':['a','c','b','d'],'Sym4':['b','b','b','a']},index=['Item1','Item2','Item3','Item4'])
In [32]: print(sample)
Out [32]:
Sym1 Sym2 Sym3 Sym4
Item1 a a a b
Item2 a c c b
Item3 a b b b
Item4 d b d a
et je veux trouver un moyen élégant pour obtenir la distance entre chaque Item
selon cette matrice de distance:
In [34]:
DistMatrix = pd.DataFrame({'a': [0,0,0.67,1.34],'b':[0,0,0,0.67],'c':[0.67,0,0,0],'d':[1.34,0.67,0,0]},index=['a','b','c','d'])
print(DistMatrix)
Out[34]:
a b c d
a 0.00 0.00 0.67 1.34
b 0.00 0.00 0.00 0.67
c 0.67 0.00 0.00 0.00
d 1.34 0.67 0.00 0.00
Par exemple en comparant Item1
à Item2
de comparer aaab
-> accb
-- à l'aide de la matrice de distance ce serait 0+0.67+0.67+0=1.34
Idéal de sortie:
Item1 Item2 Item3 Item4
Item1 0 1.34 0 2.68
Item2 1.34 0 0 1.34
Item3 0 0 0 2.01
Item4 2.68 1.34 2.01 0
Vous devez vous connecter pour publier un commentaire.
c'est de faire deux fois plus de travail que nécessaire, mais techniquement fonctionne pour les non-symétrique matrices de distance ainsi ( ce que c'est censé vouloir dire )
vous pouvez le rendre plus lisible par l'écriture de pièces:
C'est une vieille question, mais il est un Scipy fonction qui fait cela:
pdist
fonctionne sur Numpy matrices, etDataFrame.values
est le sous-jacent Numpy NDarray représentation de la trame de données. Lemetric
argument permet de sélectionner l'un de plusieurs métriques de distance, ou vous pouvez passer toute fonction binaire à utiliser un personnalisé à distance. Il est très puissant et, dans mon expérience, très rapide. Le résultat est un "plat" tableau constitué uniquement de la partie supérieure du triangle de la matrice de distance (parce que c'est symétrique), non compris la diagonale (parce que c'est toujours à 0).squareform
se traduit alors par cette forme aplatie dans une matrice.La docs avoir plus d'informations, y compris une mathématique aperçu des nombreuses fonctions de fonctions de distance.
Pour un ensemble important de données, j'ai trouvé un moyen rapide de le faire. Supposons que vos données sont déjà dans np.format de tableau, nommés ainsi.
Ci-dessous est une expérience pour comparer le temps nécessaire pour les deux approches: