我有一个 Pandas 数据框,如下所示:
Group1 Group2 Sim
A A 1.0
A B 0.5
A C 0.8
B B 1.0
B A 0.5
B C 0.7
C C 1.0
C A 0.8
C B 0.7
Run Code Online (Sandbox Code Playgroud)
和列代表两个组对,Group1列代表 Jaccard 相似度。Group2Sim
困难在于:成对 Jaccard 计算导致两个组列中出现重复对。
因此,例如,跨“组”列:A,B == B,A; A,C == C,A; 等等。
我正在努力弄清楚这个问题:如何删除两列中的冗余/反转对?(对更大的真实数据集的计算限制需要消除冗余。)
我期待以下输出:
Group1 Group2 Sim
A B 0.5
A C 0.8
B C 0.7
Run Code Online (Sandbox Code Playgroud)
非常感谢任何对此的帮助。
谢谢!
不需要任何复杂的事情。借用这个技巧在 SQL 叉积后获取唯一对,您可以只选择当 Group1 < Group2 时
df[df["Group1"] < df["Group2"]]
Run Code Online (Sandbox Code Playgroud)
导致
Group1 Group2 Sim
1 A B 0.5
2 A C 0.8
5 B C 0.7
Run Code Online (Sandbox Code Playgroud)
如果您还想包括身份距离,请更改>为>=。
这将比接受的答案更有效,因为排序的成本很高。