Skip to main content
 首页 » 编程设计

python之在 Pandas 中展开矩阵

2025年05月04日23over140

我有一个这样的矩阵:

df = pd.DataFrame({'a':[7, 0, 3], 'b':[0, 4, 2], 'c':[3, 2, 9]}) 
df.index = list(df) 
df 
 
    a   b   c 
a   7   0   3 
b   0   4   2 
c   3   2   9 

我想得到这样的东西:

C1  C2  V 
0   a   a   7 
1   a   b   0 
2   a   c   3 
3   b   a   0 
4   b   b   4 
5   b   c   2 
6   c   a   3 
7   c   b   2 
8   c   c   9 

为此我编写了以下代码:

vv = pd.DataFrame(columns=['C1', 'C2', 'V']) 
i = 0 
for cat1 in df.index: 
    for cat2 in df.index: 
        vv.loc[i] = [cat1, cat2, d[cat1][cat2]] 
        i += 1 
vv['V'] = vv['V'].astype(int) 

是否有更好/更快/更优雅的方式来做到这一点?

请您参考如下方法:

In [90]: df = df.stack().reset_index() 
 
In [91]: df.columns = ['C1', 'C2', 'v'] 
 
In [92]: df 
Out[92]:  
  C1 C2  v 
0  a  a  7 
1  a  b  0 
2  a  c  3 
3  b  a  0 
4  b  b  4 
5  b  c  2 
6  c  a  3 
7  c  b  2 
8  c  c  9