Использование pandas, я хочу преобразовать длинный фрейм данных в широкий, но обычный метод pivot
не такой гибкий, как мне нужно.Pandas long to wide
Вот длинные данные:
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
, но я хочу, значение ячейки заполняться «наибольшим» type
согласно HIGH
>MED
>LOW
>NONE
ie оно должно выглядеть как
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
При кастинге, как я могу контролировать, что такое значение ячейки?
Очень полезно и чисто. Спасибо! –