Ahm*_*tin 6 python numpy dataframe pandas scikit-learn
我有一个数据框,如:
animal ids
cat 1,3,4
dog 1,2,4
hamster 5
dolphin 3,5
Run Code Online (Sandbox Code Playgroud)
数据框非常大,有超过 8 万行,而 ids 列可能很容易包含超过数千甚至 1 万个逗号分隔的 id。给定行中的 ID 在逗号分隔的字符串中是唯一的。
我想构建一个计算 Jaccard 索引的数据框,即动物列中的每个项目与 ids 列中的每个项目在联合上的交集。
因此,如果我们查看 cat 和 dog,联合为 2(ids 1 和 4),联合为 4(ids 1、2、3、4),因此 Jaccard 的索引为 2/4 = 0.5。拥有这种格式的数据集会很棒:
cat dog hamster dolphin
cat 1 0.5 0 0.25
dog 0.5 1 0 0
hamster 0 0 1 0.5
dolphin 0.25 0 0.5 1
Run Code Online (Sandbox Code Playgroud)
这意味着使用行索引作为动物的名称,以便我可以快速找到相关的 jaccard 索引,例如:
cat_dog_ji = df_new['cat']['dog']
Run Code Online (Sandbox Code Playgroud)
你可以在这里使用str.get_dummies和一些scipy工具。
from scipy.spatial import distance
u = df["ids"].str.get_dummies(",")
j = distance.pdist(u, "jaccard")
k = df["animal"].to_numpy()
pd.DataFrame(1 - distance.squareform(j), index=k, columns=k)
Run Code Online (Sandbox Code Playgroud)
cat dog hamster dolphin
cat 1.00 0.5 0.0 0.25
dog 0.50 1.0 0.0 0.00
hamster 0.00 0.0 1.0 0.50
dolphin 0.25 0.0 0.5 1.00
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |