基于相互连接的熊猫获取满足条件的值对

Sla*_*jni 2 python graph-theory networkx pandas

假设我有以下数据框:

     index    A      B
     -----------------
      1      A1     B1
      2      A1     B2
      3      A1     B3
      4      A2     B1
Run Code Online (Sandbox Code Playgroud)

我如何编写返回这些对 (Ax,By) 的代码,这些对满足这样的条件,即 Ax 与更多不同的 Bs 连接,而不是 By 与不同的 As 连接。

在这种情况下,它应该返回 (A1, B1),因为 A1 与 3 个不同的 B 相连,但 B1 与 2 个不同的 As 相连。

yat*_*atu 5

我们可以将其视为图形问题,并检查这些节点中哪些节点度数高于 1。然后只需对两个值都满足条件的行进行索引:

import networkx as nx

G = nx.from_pandas_edgelist(df, source='A', target='B')
keep = [node for node, deg in G.degree() if deg>1]
df[df[['A','B']].isin(keep).all(1)]

   index   A   B
0      1  A1  B1
Run Code Online (Sandbox Code Playgroud)