2 回答

TA贡献1798条经验 获得超3个赞
解决方案是使用apply:
df.apply(lambda x: len(set(x['list_left']) & set(x['list_right'])) / float(len(set(x['list_left']) | set(x['list_right']))) * 100,1)
输出:
0 25.0
1 100.0
2 0.0
dtype: float64
方程的解释:
首先在等式中检查公共元素:
df.apply(lambda x: len(set(x['list_left']) & set(x['list_right'])), 1)
输出:
0 1
1 2
2 0
dtype: int64
接下来,您检查列表的不同元素并将其乘以:
df.apply(lambda x: float(len(set(x['list_left']) | set(x['list_right']))), 1)
输出:
0 4
1 2
2 4
dtype: float64
相似度由(共同元素/不同元素)*100 定义。所以对于第一行它是1/4*100 = 0.25。

TA贡献1820条经验 获得超9个赞
这里解决方案不使用apply
s = df.list_left + df.list_right
s1 = s.map(set)
(s.str.len() - s1.str.len()) / s1.str.len() * 100
Out[132]:
0 25.0
1 100.0
2 0.0
dtype: float64
添加回答
举报