如何对具有组合列表的 pandas 数据框进行分组?

How to group a pandas dataframe which has a list of combinations?

我有一个 pandas 数据框,它具有记录相似性的结果。例如,rowid 123 类似于 rowid 512,rowid 123 类似于 681。从技术上讲,所有三行都是相似的。如何对相似的行进行分组?

请注意,我的数据具有组合 - 示例 (123,512) 和 (512,123)

import pandas as pd
df = pd.DataFrame({'A': [123,123,512,412,412,536], 'B': [512,681,123,536,919,412]})
df

A   B
123 512
123 681
512 123
412 536
412 919
536 412

预期输出

Group1  123
Group1  512
Group1  681
Group2  412
Group2  536
Group2  919

您可以使用 networkx 来确定连接的组。

In [750]: import networkx as nx

In [751]: G = nx.from_pandas_dataframe(df, 'A', 'B')  # Create the graph

In [752]: Gcc = nx.connected_components(G)

In [753]: pd.DataFrame([{'id': i, 'group': 'group%s' % (g+1)}
     ...:               for g, ids in enumerate(Gcc) for i in ids])
Out[753]:
    group   id
0  group1  512
1  group1  681
2  group1  123
3  group2  536
4  group2  412
5  group2  919