如何对具有组合列表的 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
我有一个 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