如何对同一列中至少共享一个"1"的所有标签(索引)进行分组?

wik*_*wik 2 python numpy pandas

分组规则:

  • 在同一列中至少有一个"1"
  • 共享任意数量的行(参见示例)

例如:

   c0  c1  c2  c3
A   1   0   0   1
B   0   0   1   0
C   0   0   0   1
D   0   1   1   0
E   0   1   0   0
Run Code Online (Sandbox Code Playgroud)

预期产量:

[[A, C], [B, D, E]]
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,B和E在列中不共享"1",但它们共有"D",因此所有3都应该分组

Ted*_*rou 5

这是networkx的解决方案.

import networkx as nx
a = np.where(df.T, df.index, '').sum(axis=1)
g = [list(x) for x in a if len(x) > 1]
G = nx.Graph(g)
list(nx.connected_components(G))

[{'B', 'D', 'E'}, {'A', 'C'}]
Run Code Online (Sandbox Code Playgroud)