删除跨列的反向对(Pandas)

n0r*_*0ro 5 python-3.x pandas

我有一个 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)

非常感谢任何对此的帮助。

谢谢!

Dan*_*Dan 3

不需要任何复杂的事情。借用这个技巧在 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)

如果您还想包括身份距离,请更改>>=

这将比接受的答案更有效,因为排序的成本很高。

  • 我重新检查了代码,你的代码更简单、更快。不需要排序。这是正确的答案。OP应该选择这个。 (2认同)