将数据帧行转换为 Python 集

use*_*543 5 python similarity set dataframe pandas

我有这个数据集:

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)
Run Code Online (Sandbox Code Playgroud)

示例输出如下:

   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
Run Code Online (Sandbox Code Playgroud)

我想对该数据帧中的每一行进行成对比较(杰卡德相似度),例如,比较

A 1 plusA 2 square得到这两个集合之间的相似度值。

我写了一个jaccard函数:

def jaccard(a, b):
    c = a.intersection(b)
    return float(len(c)) / (len(a) + len(b) - len(c))
Run Code Online (Sandbox Code Playgroud)

这只能在现场工作,因为我用过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
Run Code Online (Sandbox Code Playgroud)

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

谢谢你,

Seb*_*ian 3

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

series_set = df.apply(frozenset, axis=1)
new_df = series_set.apply(lambda a: series_set.apply(lambda b: jaccard(a,b)))
Run Code Online (Sandbox Code Playgroud)