2015-11-12 55 views
0

我有一個DataFrame,我需要將報頭拆分爲多個行,作爲同一個Dataframe的報頭。在DataFrame中將報頭拆分爲多個報頭

數據框看起來是這樣的,

我的數據幀的樣子如下,

gene ALL_ID_1 AML_ID_1 AML_ID_2 AML_ID_3 AML_ID_4 AML_ID_5 Stroma_ID_1 Stroma_ID_2 Stroma_ID_3 Stroma_ID_4 Stroma_ID_5 Stroma_CR_Pat_4 Stroma_CR_Pat_5 Stroma_CR_Pat_6 Stroma_CR_Pat_7 Stroma_CR_Pat_8 
ENSG 8 1 11 5 10 0 628 542 767 578 462 680 513 968 415 623 
ENSG 0 0 1 0 0 0 0 28 1 3 0 1 4 0 0 0 
ENSG 661 1418 2580 6817 14727 5968 9 3 5 9 2 9 3 3 5 1 
ENSG 20 315 212 8 790 471 1283 2042 1175 2839 1110 857 1880 1526 2262 2624 
ENSG 11 26 24 9 11 2 649 532 953 463 468 878 587 245 722 484 

我想上面的頭如下吐盡,

network ID ID        REL     
node B_ALL AML     Stroma         
hemi 1 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 
ENSG 8 1 11 5 10 0 628 542 767 578 462 680 513 968 415 623 
ENSG 0 0 1 0 0 0 0 28 1 3 0 1 4 0 0 0 
ENSG 661 1418 2580 6817 14727 5968 9 3 5 9 2 9 3 3 5 1 
ENSG 20 315 212 8 790 471 1283 2042 1175 2839 1110 857 1880 1526 2262 2624 
ENSG 11 26 24 9 11 2 649 532 953 463 468 878 587 245 722 484 

任何幫助非常感謝..

回答

1

可能不是你把她放在最小的例子e,很少有人有主題知識來了解什麼是network,nodehemi在您的上下文中。

你只需要創建MultiIndex,並與您創建的一個替代你的列索引:

有3個規則,在你的榜樣:

  • 1時,只要「間質」被找到,列屬於REL,否則屬於ID
  • 2,node是初始列名的第一個字段
  • 3,hemi在初始列名

接着的最後一個字段,只是代碼遠:

In [110]: 
df.columns = pd.MultiIndex.from_tuples(zip(np.where(df.columns.str.find('Stroma')!=-1, 'REL', 'ID'), 
              df.columns.map(lambda x: x.split('_')[0]), 
              df.columns.map(lambda x: x.split('_')[-1])), 
             names=['network', 'node', 'hemi']) 

print df 

network ID         REL       \ 
node  ALL AML       Stroma       
hemi  1  1  2  3  4  5  1  2  3  4  5 
gene                   
ENSG  8  1 11  5  10  0 628 542 767 578 462 
ENSG  0  0  1  0  0  0  0 28  1  3  0 
ENSG  661 1418 2580 6817 14727 5968  9  3  5  9  2 
ENSG  20 315 212  8 790 471 1283 2042 1175 2839 1110 
ENSG  11 26 24  9  11  2 649 532 953 463 468 

network        
node         
hemi  4  5  6  7  8 
gene         
ENSG  680 513 968 415 623 
ENSG  1  4  0  0  0 
ENSG  9  3  3  5  1 
ENSG  857 1880 1526 2262 2624 
ENSG  878 587 245 722 484