【发布时间】:2017-07-07 17:43:11
【问题描述】:
使用 pandas,我想将长数据框转换为宽数据框,但通常的 pivot 方法没有我需要的灵活。
这是长数据:
raw = {
'sample':[1, 1, 1, 1, 2, 2, 3, 3, 3, 3],
'gene':['G1', 'G2', 'G3', 'G3', 'G1', 'G2', 'G2', 'G2', 'G3', 'G3'],
'type':['HIGH', 'HIGH', 'LOW', 'MED', 'HIGH', 'LOW', 'LOW', 'LOW', 'MED', 'LOW']}
df = pd.DataFrame(raw)`
产生
gene sample type
G1 1 HIGH
G2 1 HIGH
G3 1 LOW
G3 1 MED
G1 2 HIGH
G2 2 LOW
G2 3 LOW
G2 3 LOW
G3 3 MED
G3 3 LOW
我想要的是一个数据框,其行为gene,列为sample,但我希望单元格值根据HIGH 填充为“最大”type > MED > LOW > NONE 应该是这样的
casted = {
'gene':['G1', 'G2', 'G3'],
'1':['HIGH', 'HIGH', 'MED'],
'2':['HIGH', 'LOW', 'NONE'],
'3':['NONE', 'LOW', 'MED']
}
dfCast = pd.DataFrame(casted)
这让
1 2 3 gene
HIGH HIGH NONE G1
HIGH LOW LOW G2
MED NONE MED G3
琐碎而错误地,我的长到宽命令看起来像
df = df.pivot(index='gene', columns = 'sample', values='type')
但这当然不能解释我想在HIGH>MED>LOW>NONE施加的层次结构
投射时,如何控制单元格的值是多少?
【问题讨论】:
标签: python pandas casting melt