2 回答

TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
解決方案是使用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
方程的解釋?zhuān)?/p>
首先在等式中檢查公共元素:
df.apply(lambda x: len(set(x['list_left']) & set(x['list_right'])), 1)
輸出:
0 1
1 2
2 0
dtype: int64
接下來(lái),您檢查列表的不同元素并將其乘以:
df.apply(lambda x: float(len(set(x['list_left']) | set(x['list_right']))), 1)
輸出:
0 4
1 2
2 4
dtype: float64
相似度由(共同元素/不同元素)*100 定義。所以對(duì)于第一行它是1/4*100 = 0.25。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超9個(gè)贊
這里解決方案不使用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
添加回答
舉報(bào)