我有以下代码:
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
我怎样才能做到这一点?
答案 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