【发布时间】:2017-11-29 13:24:37
【问题描述】:
我有这个数据集:
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
获得成对指标结果的最佳方法是什么?
谢谢你,
【问题讨论】:
-
“它不起作用”是什么意思?使用您给定的
df,set(df.loc[0])按预期计算为{'1', 'A', 'plus'}。 -
在我的笔记本中,结果是
{'A','M','F'} -
那是因为你有
[[0]]而不是[0],这将返回一个数据框对象而不是一个系列对象。由于它是一个数据框,set将返回列值。 -
好的,谢谢@Sebastian 我才意识到我使用双括号
-
如何计算第 0 行和第 1 行的 0.43?三项中有两项相交,所以不应该是 2 / (3 + 3 - 2) = 0.5?
标签: python pandas dataframe set similarity