データフレームの行間の類似度を計算したい。私は何人かの人々についての情報でいくつかのコラムを持っています。1列は1人です。それはそのように見えます:
print(df)
id name firstname email town age
0 1 martin pierre [email protected] Paris na
1 2 dupond sarah [email protected] London 32
2 3 dupond sarah [email protected] Berlin 32
3 4 dupond john na Madrid 45
4 5 smith na [email protected] Paris 28
少なくとも3つの列が完了している場合は、各行について、他の行と共通の値の数を列の数で割った値をカウントしたいと思います。たとえば、インデックス1の行とインデックス2の行の間には、4つの共通の変数があります。したがって、私の類似性は4/5(idはカウントされません)=類似性の80%になります。その後、類似度が0.6を超える行を見つけて新しいデータフレームを作成するため、結果は類似度マトリックスである必要があります。それはそのようなものかもしれません:
print(similarity)
0 1 2 3 4
0 1 0 0 0 0.2
1 0.2 1 0.8 0.2 0
2 0 0.8 1 0.2 0
3 0 0.2 0.2 1 0
4 0.2 0 0 0 1
結果が重複しているため、その半分で十分です。
print(similarity)
0 1 2 3 4
0 0 0 0 0.2
1 0.8 0.2 0
2 0.2 0
3 0
4
それを自動化する機能を探していますが見つかりませんでした。そのようなものは存在しますか?読んでくれてありがとう、どんなアドバイスやアイデアも歓迎されます。
scipy.spatial.distance.pdist
カスタム距離機能で使用できます
from scipy.spatial.distance import pdist, squareform
pd.DataFrame(1 - squareform(pdist(df.set_index('id'), lambda u,v: (u != v).mean())))
でる:
0 1 2 3 4
0 1.0 0.0 0.0 0.0 0.2
1 0.0 1.0 0.8 0.2 0.0
2 0.0 0.8 1.0 0.2 0.0
3 0.0 0.2 0.2 1.0 0.0
4 0.2 0.0 0.0 0.0 1.0
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加