Skip to main content
 首页 » 编程设计

python之将数据框行转换为 Python 集

2025年05月04日20tuyile006

我有这个数据集:

import pandas as pd 
import itertools 
 
A = ['A','B','C'] 
M = ['1','2','3'] 
F = ['plus','minus','square'] 
 
df = pd.DataFrame(list(itertools.product(A,M,F)), columns=['A','M','F']) 
print(df) 

示例输出是这样的:

   A  M       F 
0   A  1    plus 
1   A  1   minus 
2   A  1  square 
3   A  2    plus 
4   A  2   minus 
5   A  2  square 

我想对该数据框中的每一行进行成对比较(jaccard 相似度),例如,比较

A 1 plus 和 A 2 square 并获得这两个集合之间的相似度值。

我写了一个jaccard函数:

def jaccard(a, b): 
    c = a.intersection(b) 
    return float(len(c)) / (len(a) + len(b) - len(c)) 

因为我使用了intersection

,所以只适用于片场

我想要这样的输出(这个预期结果值只是随机数):

    0     1     2     3     45 
0  1.00  0.43  0.61  0.55  0.46 
1  0.43  1.00  0.52  0.56  0.49 
2  0.61  0.52  1.00  0.48  0.53 
3  0.55  0.56  0.48  1.00  0.49 
45  0.46  0.49  0.53  0.49  1.00 

获取成对指标结果的最佳方法是什么?

谢谢,

请您参考如下方法:

可以在这里找到您想要的完整实现:​​

series_set = df.apply(frozenset, axis=1) 
new_df = series_set.apply(lambda a: series_set.apply(lambda b: jaccard(a,b)))