我有以下dataframe:
df = pd.DataFrame({"zip":['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A','C', 'C', 'C','C', 'C', 'C'],
"zip_splitted":['A_1', 'A_1', 'A_1','A_1', 'A_1', 'A_1',
'A_2', 'A_2', 'A_2','A_2', 'A_2', 'A_2',
'C_1', 'C_1', 'C_1', 'C_1', 'C_1', 'C_1'],
"cluster":['111', '111', '111', '112', '112', '112',
'113', '113', '113', '114', '114', '114',
'115', '115', '115', '116', '116', '116'],
"cluster2":['991', '991', '994', '991', '882', '991',
'993', '991', '994', '992', '991', '991',
'889', '889', '992', '998', '997', '999']
})
| zip| zip_splitted|集群|cluster2|
| --|--|--|--|
| 一|A_1| 111 | 991 |
| 一|A_1| 111 | 991 |
| 一|A_1| 111 | 994 |
| 一|A_1| 112 | 991 |
| 一|A_1| 112 | 882 |
| 一|A_1| 112 | 991 |
| 一|A_2| 113 | 993 |
| 一|A_2| 113 | 991 |
| 一|A_2| 113 | 994 |
| 一|A_2| 114 | 992 |
| 一|A_2| 114 | 991 |
| 一|A_2| 114 | 991 |
| C| C_1| 115 | 889 |
| C| C_1| 115 | 889 |
| C| C_1| 115 | 992 |
| C| C_1| 116 | 998 |
| C| C_1| 116 | 997 |
| C| C_1| 116 | 999 |
主要目标是重新分配“cluster”中的值,以便如果“cluster”中的值组在“cluster 2”值中至少有一个相同的值,则它们应该与相同的群集ID组合。
对于当前情况,输出应如下(群集111、112、113、114、115、116-在群集2中至少有一个公共值,将它们重新分配给111、116 -保持相同):
| zip| zip_splitted|集群|cluster2|集群新闻|
| --|--|--|--|--|
| 一|A_1| 111 | 991 | 111 |
| 一|A_1| 111 | 991 | 111 |
| 一|A_1| 111 | 994 | 111 |
| 一|A_1| 112 | 991 | 111 |
| 一|A_1| 112 | 882 | 111 |
| 一|A_1| 112 | 991 | 111 |
| 一|A_2| 113 | 993 | 111 |
| 一|A_2| 113 | 991 | 111 |
| 一|A_2| 113 | 994 | 111 |
| 一|A_2| 114 | 992 | 111 |
| 一|A_2| 114 | 991 | 111 |
| 一|A_2| 114 | 991 | 111 |
| C| C_1| 115 | 889 | 111 |
| C| C_1| 115 | 889 | 111 |
| C| C_1| 115 | 992 | 111 |
| C| C_1| 116 | 998 | 116 |
| C| C_1| 116 | 997 | 116 |
| C| C_1| 116 | 999 | 116 |
目前被groupbys卡住了,试图创建一个Map列表,但不确定这是一个正确的方法。
感谢任何帮助。
2条答案
按热度按时间gopyfrb31#
试试这个:
输出量:
jw5wzhpr2#
用pandas iterrows()创建的解决方案也在工作,但图形方法看起来更好,可能更快。