2014-10-26 31 views
2

到矩陣I具有在大熊貓數據幀(DF)的形式如下數據:由分離從錶轉換在python

每個列名已經開始和結束節點「_」。即,「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 

的結束點,我想將其轉換成AA二維矩陣獲取輸出到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]] 

是否有大熊貓輸出方式這是一個矩陣,並打印出的行和列的名字呢?

回答

4

我不知道如果這完全是爲優雅越好,但:

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 
+0

謝謝! A-> B值和B-> A值似乎已經互換了,可以重點解決這個問題嗎?即A-> B應該是23而不是19 – user308827 2014-10-26 23:03:24

+0

沒關係,我總是可以轉置:)謝謝! – user308827 2014-10-26 23:04:56

+0

@ user308827:是的,對不起,我需要在創建「col_name」和「row_name」列的行中交換'0'和'1'索引 – Marius 2014-10-26 23:05:47