我有一个相关矩阵,但指定为对,例如:
cm = pd.DataFrame({'name1': ['A', 'A', 'B'],
'name2': ['B', 'C', 'C'],
'corr': [0.1, 0.2, 0.3]})
cm
name1 name2 corr
0 A B 0.1
1 A C 0.2
2 B C 0.3
将其转换为Numpy二维数组相关矩阵的最简单方法是什么?
A B C
A 1.0 0.1 0.2
B 0.1 1.0 0.3
C 0.2 0.3 1.0
一种方法可能是使用networkX
构建图形,将corr
列设置为边weight
,然后使用adjacency matrix获得nx.to_pandas_adjacency
:
nx.to_pandas_adjacency
import networkx as nx
G = nx.from_pandas_edgelist(cm.rename(columns={'corr':'weight'}),
source='name1',
target='name2',
edge_attr ='weight')
G.edges(data=True)
# EdgeDataView([('A', 'B', {'weight': 0.1}), ('A', 'C', {'weight': 0.2}),
# ('B', 'C', {'weight': 0.3})])
adj = nx.to_pandas_adjacency(G)
adj[:] = adj.values + np.eye(adj.shape[0])