python - 从 Pandas 数据帧生成相似度矩阵

标签 python pandas dataframe similarity

我有一个df

id    val1    val2    val3
100    aa      bb      cc
200    bb      cc      0
300    aa      cc      0
400    bb      aa      cc

从这里我必须生成一个 df,像这样:

     100  200  300  400                    
100    3    2    2    3
200    2    2    1    2
300    2    1    2    2
400    3    2    2    3

说明:id 100包含aa,bb,cc200包含bb,cc,0

有2个相似的值。

因此在我的最终矩阵中,应该插入 index-100column 200 的交集单元格,2

同样对于 id 200- 值是 bb,cc,0 而对于 id 300 - aa,cc,0

这里的相似度是1,因此在我的最终矩阵中 200(index)-300(column)对应的单元格应插入1.

最佳答案

一些预处理。首先,set_indexid 并去掉 0,我们不需要它们。

df = df.set_index('id').replace('0', np.nan)

df    
    val1 val2 val3
id                
100   aa   bb   cc
200   bb   cc  NaN
300   aa   cc  NaN
400   bb   aa   cc 

现在,结合使用 pd.get_dummiesdf.dot 并获得相似度分数。

x = pd.get_dummies(df)
y = x.groupby(x.columns.str.split('_').str[1], axis=1).sum()    
y.dot(y.T)

     100  200  300  400  
id                   
100    3    2    2    3
200    2    2    1    2
300    2    1    2    2
400    3    2    2    3

关于python - 从 Pandas 数据帧生成相似度矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46441705/

相关文章:

pandas - 按字母顺序对 Pandas 数据框中的数据进行排序

python - Django 检查运行时间

python - 如何在Python中有效存储非常大的列表

python - pd.to_datetime 更改日期格式产生错误的日​​期

python - 如何将 Tableau .hyper 文件转换为 Pandas 数据帧?

Python pandas : use of DataFrame. 用函数替换函数作为值

python - pandas:重命名多索引 df 中的列标签

r - 按组选择每次运行零之前的最后一个非零值

python - scapy 中嗅探功能的过滤选项

python - scipy.signal.find_peaks_cwt 参数