python中表到矩阵的转换

python中表到矩阵的转换,python,pandas,Python,Pandas,我有以下熊猫数据框(df)形式的数据: 每个列名都有起始节点和结束节点,它们之间用“\”分隔。即,“A_B”指A的开始节点和B的结束节点 A_A A_B A_C B_B B_A B_C C_C C_A C_B 12 23 33 43 19 98 44 77 35 我想把它转换成一个2D矩阵,输出到csv,这样看起来像: A B C A 12 23 33 B 19 43 98 C

我有以下熊猫数据框(df)形式的数据:

每个列名都有起始节点和结束节点,它们之间用“\”分隔。即,“A_B”指A的开始节点和B的结束节点

A_A   A_B   A_C   B_B   B_A   B_C   C_C   C_A   C_B
12    23    33    43    19    98    44    77    35
我想把它转换成一个2D矩阵,输出到csv,这样看起来像:

   A    B    C
A  12   23   33
B  19   43   98
C  77   35   44
要做到这一点,假设我们有

from itertools import groupby, combinations_with_replacement
col_names = ['A','B','C']

for i in combinations_with_replacement(col_names, 2):
    get_val = df[i[0]+'_'+i[1]]

pandas中是否有方法将其输出为矩阵并打印出行和列名?

我不确定这是否尽可能优雅地完成,但是:

df = pd.read_clipboard()
df
Out[3]: 
   A_A  A_B  A_C  B_B  B_A  B_C  C_C  C_A  C_B
0   12   23   33   43   19   98   44   77   35

dfT = df.transpose().reset_index()

dfT
Out[8]: 
  index   0
0   A_A  12
1   A_B  23
2   A_C  33
3   B_B  43
4   B_A  19
5   B_C  98
6   C_C  44
7   C_A  77
8   C_B  35

dfT['col_name'] = dfT['index'].str.split('_').map(lambda x: x[1])
dfT['row_name'] = dfT['index'].str.split('_').map(lambda x: x[0])
dfT.pivot(index='row_name', columns='col_name', values=0)
Out[17]: 
col_name   A   B   C
row_name            
A         12  23  33
B         19  43  98
C         77  35  44
要删除索引名,请执行以下操作:

final_mat = dfT.pivot(index='row_name', columns='col_name', values=0)
final_mat
Out[19]: 
col_name   A   B   C
row_name            
A         12  23  33
B         19  43  98
C         77  35  44

final_mat.index.name = None
final_mat.columns.name = None
final_mat
Out[22]: 
    A   B   C
A  12  23  33
B  19  43  98
C  77  35  44

谢谢A->B值和B->A值似乎已经互换,pivot可以解决这个问题吗?i、 e.A->B应该是23,而不是2319@user308827:啊,是的,对不起,我需要在创建
col\u name
row\u name
列的行中交换
0
1
索引有没有办法不输出“col\u name”和“row\u name”,但仍然保留实际的列和行名称?谢谢@user308827当然,只需将名称设置为
None