如何将含多国家的Dataframe转换为以ID为索引的邻接矩阵?
解决方案
你可以通过以下步骤用Pandas实现需求:
- 构造原始DataFrame(如果已有数据可跳过此步)
import pandas as pd data = { 'ID': [1, 2, 3, 4], 'Country': ['Italy, Spain', 'Spain, South Africa', 'France, Germany', 'Germany, Spain'] } df = pd.DataFrame(data)
- 拆分并展开国家列
将每个ID对应的多个国家拆分为单独行,保留ID关联:
df_expanded = df.assign(Country=df['Country'].str.split(', ')).explode('Country')
- 生成邻接矩阵
使用crosstab生成ID与国家的交叉表,自动标记每个ID对应的国家为1,其余为0:
adj_matrix = pd.crosstab(df_expanded['ID'], df_expanded['Country'])
执行后得到的邻接矩阵如下:
| ID | France | Germany | Italy | Spain | South Africa |
|---|---|---|---|---|---|
| 1 | 0 | 0 | 1 | 1 | 0 |
| 2 | 0 | 0 | 0 | 1 | 1 |
| 3 | 1 | 1 | 0 | 0 | 0 |
| 4 | 0 | 1 | 0 | 1 | 0 |
注:你提供的目标矩阵中ID3的Germany值为0,这与原始数据中ID3包含Germany的信息不符,上述结果是基于原始数据生成的正确邻接矩阵。
内容的提问来源于stack exchange,提问作者josé96
相关产品推荐
相关产品推荐

