Я пытаюсь найти DataFrame для проведения некоторого анализа данных, и мне бы очень понравилось иметь фрейм данных, который может обрабатывать регулярную индексацию и MultiIndexing вместе в одном кадре данных.Сочетание мультииндекса и индекса в PANDAS DataFrame
Для каждого пациента у меня есть 6 ломтиков различных типов данных (T1avg, T2avg и т. Д.). Давайте назовем это dataframe1 (от IPython ноутбука):
import pandas
dat0 = numpy.zeros([6])
dat1 = numpy.zeros([6])
pat0=(['NecS3Hs05']*6)
pat1=(['NecS3Hs06']*6)
slc = (['Slice ' + str(x) for x in xrange(dat0.shape[-1])])
ind = zip(*[pat0+pat1,slc+slc])
named_ind = pandas.MultiIndex.from_tuples(ind, names = ['Patients','Slices'])
ser = pandas.Series(numpy.append(dat0,dat1),index = named_ind)
df = pandas.DataFrame(data=ser, columns=['T1avg'])
Изображения выхода: df1
У меня тоже есть, для каждого пациента, различные строки информации (типа опухоли, количество сеансов визуализации, тип лечения):
pats = ['NecS3Hs05','NecS3Hs05']
tx = ['Control','Treated']
Ttype = ['subcutaneous','orthotopic']
NSessions = ['2','3']
cols = ['Tx Group', 'Tumour Type', 'Imaging Sessions']
dat = numpy.array([tx,Ttype,NSessions]).T
df2 = pandas.DataFrame(dat, index=pats,columns=cols)
[Я хотел бы опубликовать фотографию здесь, как хорошо, но мне нужно, по крайней мере, 10 репутации сделать это]
в идеале, я хочу есть dataframe, который выглядит следующим образом (в общих чертах его в редакторе изображений пардон)
Изображение желаемых результатов: df-desired
Но когда я пытаюсь использовать команду Append,
com = df.append(df2)
Я получаю что-то нежелательное, MultiIndex, который я установил в df, теперь ушел, заменен простым индексом типов кортежей («NecS3Hs05, Slice 0» и т. д.). Индексы из df2 остаются теми же «NecS3Hs05».
Возможно ли это сделать с PANDAS, или я не лажу здесь неправильное дерево? Кроме того, это даже рекомендуемый способ хранения атрибутов пациента в фреймворке данных (т. Е. Это неудобно)? Я думаю, что мне бы хотелось, чтобы все было простым индексом, но вместо этого храните N-d массивы внутри элементов фрейма данных.
Например, если я пытаюсь что-то вроде:
com['NecS3Hs05','T1avg']
Я хочу, чтобы получить массив/кортеж формы/Len 6
и когда я пытаюсь получить тип опухоли:
com['NecS3Hs05','Tumour Type']
Я получаю строку подкожной. Очевидно, что я также хочу сохранить классные функции фреймов данных, похоже, что PANDAS - это правильный путь, я просто должен понять немного больше о том, как настроить мой фрейм данных.
Надеюсь, это разумный вопрос, если нет, я был бы счастлив переделать его.
P.S. Он чувствует себя «неправильно» (['NecS3Hs05'] * 6), чтобы заполнить записи и настроить MultiIndex таким образом, есть ли у кого лучший способ? – Firas
Я бы просто использовал обычный DataFrame с опухолью и т. Д. Info, дублированный по нескольким строкам. – BrenBarn
@BrenBarn Я считаю, что это OP указывает в df-желаемом – DrSAR