Pandas:如何迭代创建组索引

2024-05-28 18:16:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

| 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已经是group1的一部分,所以我将这个id(2)也分配给group1。 然后,id(3)是(acc2,add2);因为add2已经是group1的一部分(来自上一个赋值),所以我也将id(3)赋值给group1。你知道吗

类似地,我想创建一个组,如果帐户或地址已经在一个组中,那么帐户或地址出现的所有ID都应该是同一个组的一部分。你知道吗


Tags: idaddress地址帐户accountgroup1add1add2
1条回答
网友
1楼 · 发布于 2024-05-28 18:16:41

我相信你需要:

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

相关问题 更多 >

    热门问题