如何对多组别名进行分类以识别一个人

How to classify groups of aliases to identify one individual

    i    j
    1    2
    1    3
    3    2
    4    5
    5    6
    7    8
    9    10
    .    .
    .    .
    .    .
    101  1
    102  105
    102  4

上面的每一行table代表一个人。 ij 的列是人的标识符,只属于那个人。这些标识符出现在多行中,因此包含另一行相同标识符的一行将意味着这两行代表同一个人,并且这些行中的配对标识符也属于该人。例如,第一行包含 1 和 2,第二行包含 1 和 3。由于这两行中都存在 1,这意味着 1,2 和 3 是该人的标识符。一个人可以有任意数量的行。

我正在寻找一种有效的分类算法,它将所有标识符组合在一起并分配一个唯一的 ID,代表分配给这些 ID 的个人。这是一种离散链分类问题。我应该研究一种算法或分类实践来帮助解决我的问题。如果有已知的图书馆,我也在 python 和 pandas 工作。

你可以有非常长的链,所以最好使用图表。您的问题可以通过 networkx 库用几行解决:

import networkx as nx

data=[
    [1, 2],
    [1, 3],
    [3, 2],
    [4, 5],
    [5, 6],
    [7, 8],
    [9, 10]
]

G = nx.Graph()
G.add_edges_from(data)
list(nx.connected_components(G))

Returns:

[{1, 2, 3}, {4, 5, 6}, {7, 8}, {9, 10}]

您要查找的内容称为connected components

*也许这会对你有所帮助。

import pandas as pd

l1= ['i','j']
l2 = [[1,2],
      [1,3],
      [3,2],
      [4,5],
      [5,6],
      [7,8],
      [9,10],
      [101,1],
      [102,105],
      [102,4]]


df = pd.DataFrame(l2, columns=l1)

print(df)

df  = df.groupby('i')['j'].apply(list).reset_index(level='i')

print(df)

## ### Output  ####
#Before
     i    j
0    1    2
1    1    3
2    3    2
3    4    5
4    5    6
5    7    8
6    9   10
7  101    1
8  102  105
9  102    4

#After
     i         j
0    1    [2, 3]
1    3       [2]
2    4       [5]
3    5       [6]
4    7       [8]
5    9      [10]
6  101       [1]
7  102  [105, 4]