如何在Pandas多级数据框中删除不需要的索引标头

时间:2017-03-10 07:09:13

标签: python csv pandas dataframe

我有以下代码:

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

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

您需要将参数values添加到pivot_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