2017-03-10 50 views
2

我有以下代碼:如何下降刪除不需要的指數頭在大熊貓多級數據幀

import pandas as pd 
df = pd.DataFrame({ 
       'value': [10,10,12,13,14,15], 
       'gene_symbol': ['a', 'b', 'c', 'd', 'e', 'f'], 
       'cellprep': ['xxx', 'xxx', 'yyy', 'zzz', 'xxx', 'zzz'], 
       'measure': ['tpm','tpm','tpm','fpkm','fpkm','fpkm']}) 


ndf = df.pivot_table(index=['cellprep','gene_symbol'], columns='measure').fillna(0) 
ndf.reset_index(drop=True,level=1) 

將會產生以下的數據幀:

  value 
measure fpkm tpm 
cellprep 
xxx  0.0 10.0 
xxx  0.0 10.0 
xxx  14.0 0.0 
yyy  0.0 12.0 
zzz  13.0 0.0 
zzz  15.0 0.0 

我想要做的就是寫該數據幀到一個TSV文件 ,看起來簡直像這樣

cellprep fpkm tpm 
xxx  0.0 10.0 
xxx  0.0 10.0 
xxx  14.0 0.0 
yyy  0.0 12.0 
zzz  13.0 0.0 
zzz  15.0 0.0 

如何我可以做到嗎?

回答

2

你需要添加參數valuespivot_table

ndf = df.pivot_table(index=['cellprep','gene_symbol'], 
        columns='measure', 
        values='value').fillna(0) 

print (ndf.reset_index(drop=True,level=1)) 

measure fpkm tpm 
cellprep    
xxx  0.0 10.0 
xxx  0.0 10.0 
xxx  14.0 0.0 
yyy  0.0 12.0 
zzz  13.0 0.0 
zzz  15.0 0.0 

另一種解決方案是MultiIndex.droplevel

ndf = df.pivot_table(index=['cellprep','gene_symbol'], columns='measure').fillna(0) 
ndf.columns = ndf.columns.droplevel(0) 
print (ndf.reset_index(drop=True,level=1)) 
measure fpkm tpm 
cellprep    
xxx  0.0 10.0 
xxx  0.0 10.0 
xxx  14.0 0.0 
yyy  0.0 12.0 
zzz  13.0 0.0 
zzz  15.0 0.0