python中表到矩阵的转换
我有以下熊猫数据框(df)形式的数据: 每个列名都有起始节点和结束节点,它们之间用“\”分隔。即,“A_B”指A的开始节点和B的结束节点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
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