熊猫:如何迭代创建组索引



我有一个这种格式的数据帧

| id | account | address |
|----|---------|---------|
| 1  | acc1    | add1    |
| 2  | acc1    | add2    |
| 3  | acc2    | add2    |
| 4  | acc3    | add3    |
| 5  | acc1    | add4    |
| 6  | acc4    | add5    |
| 7  | acc2    | add6    |
| 8  | acc5    | add7    |
| 9  | acc6    | add4    |
| 10 | acc7    | add8    |
| 11 | acc8    | add9    |
| 12 | acc2    | add10   |
| 13 | acc3    | add11   |
| 14 | acc9    | add12   |

现在,我想创建一个组索引,我想在其中查找帐户或地址已属于组的组。如下所示

| id | account | address | group_index |
|----|---------|---------|-------------|
| 1  | acc1    | add1    | group1      |
| 2  | acc1    | add2    | group1      |
| 3  | acc2    | add2    | group1      |
| 4  | acc3    | add3    | group2      |
| 5  | acc1    | add4    | group1      |
| 6  | acc4    | add5    | group3      |
| 7  | acc2    | add6    | group1      |
| 8  | acc5    | add7    | group4      |
| 9  | acc6    | add4    | group1      |
| 10 | acc7    | add8    | group5      |
| 11 | acc8    | add9    | group6      |
| 12 | acc2    | add10   | group7      |
| 13 | acc3    | add11   | group2      |
| 14 | acc9    | add12   | group8      |

因此,首先我从 id(1( = (acc1, add1( 开始,并分配一个组索引,例如 group1。然后, id(2( 是 (acc1, add2(;由于 acc1 已经是组 1 的一部分,所以我将此 id(2( 也分配给组 1。然后, id(3( 是 (acc2, add2(;由于 add2 已经是组 1 的一部分(来自以前的分配(,我将 id(3( 也分配给组 1

同样,我想创建组,如果帐户或地址

已经在组中,则显示帐户或地址的所有ID,它们都应该属于同一组。

我相信你需要:

import networkx as nx
# Create the graph from the dataframe
g = nx.Graph()
g.add_edges_from(df[['account','address']].itertuples(index=False))
connected_components = nx.connected_components(g)
# Find the component id of the nodes
node2id = {}
for cid, component in enumerate(connected_components):
    for node in component:
        node2id[node] = 'group' + str(cid + 1)
df['new'] = df['account'].map(node2id)
print (df)
    id account address     new
0    1    acc1    add1  group1
1    2    acc1    add2  group1
2    3    acc2    add2  group1
3    4    acc3    add3  group2
4    5    acc1    add4  group1
5    6    acc4    add5  group3
6    7    acc2    add6  group1
7    8    acc5    add7  group4
8    9    acc6    add4  group1
9   10    acc7    add8  group5
10  11    acc8    add9  group6
11  12    acc2   add10  group1
12  13    acc3   add11  group2
13  14    acc9   add12  group7

最新更新