如何获取列中具有相同值的行?

how to get rows with the same value in a column?

我有 2 列,我想获取第二列的值,这些值与第一列中的值相同,包括第一列中的值。例如,在下面的第一行、第三行和第四行的值具有相同的值 A。所以输出是 [A,B,C]

例如:

col1     col2
A          B
B          A
A          C
A          C
D          G
D          F

期望的输出:

[[A,B,C], [D,G,F]]

我是用列表操作做的:

L1=df['col1'].tolist()
L2=df['col2'].tolist()

然后我用for循环得到了结果。我想知道是否可以通过 pandas 个函数来完成!

这看起来像是一个图表,您正在尝试查找连通分量。我们可以使用 networkx 来完成这项工作。基本上,构建一个图形对象并根据它们属于哪个组件对节点进行分组:

import networkx as nx
G = nx.from_pandas_edgelist(df, 'col1', 'col2')
out = list(map(list, nx.connected_components(G)))

输出:

[['C', 'B', 'A'], ['F', 'D', 'G']]

感谢@ScottBoston

,上面的代码简化了很多

一个(有点)pandas 解决方案:

df 连接回 df 并反转列;然后 groupby + unique 将为我们提供每个值所属的组件。这将有重复的组,我们可以在列表理解中使用 set.issubset 来消除它们:

tmp = pd.concat((df, df[['col2','col1']])).groupby('col1')['col2'].unique()
tmp = [set([i] + v.tolist()) for i, v in zip(tmp.index, tmp.tolist())]
out = [list(x) for x in tmp if not any(x.issubset(y) for y in tmp if x!=y)]