3

我正在尝试提出一个 DataFrame 来进行一些数据分析,并且真正受益于拥有一个可以在一个数据框中同时处理常规索引和 MultiIndexing 的数据框。

对于每个患者,我有 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个声望才能这样做]

理想情况下,我想要一个如下所示的数据框(抱歉,在图像编辑器中草绘出来)

所需输出的图像:df-desired

但是当我尝试使用 append 命令时,

com = df.append(df2)

我得到了一些不希望的东西,我在 df 中设置的 MultiIndex 现在消失了,取而代之的是一个简单的元组索引('NecS3Hs05,Slice 0' 等......)。df2 的索引保持不变“NecS3Hs05”。

这可能与熊猫有关,还是我在这里吠叫错误的树?此外,这甚至是在数据框中存储患者属性的推荐方式(即这是 unpandas)吗?我认为我真正想要的是将所有内容都保留为简单的索引,而是将 Nd 数组存储在数据框的元素中。

例如,如果我尝试类似:

 com['NecS3Hs05','T1avg']

我想得到一个形状/长度为 6 的数组/元组

当我尝试获取肿瘤类型时:

com['NecS3Hs05','Tumour Type']

我得到字符串“皮下”。显然我也想保留数据框的酷特性,看起来 PANDAS 是正确的方法,我只需要更多地了解如何设置我的数据框

我希望这是一个明智的问题,如果不是,我很乐意重新形成它。

4

1 回答 1

1

我相信,如果您放弃 MultiIndex 业务,您的问题就可以解决。想象一下'''df'''只有(非唯一的)'Patient'作为索引。“切片”将成为一个简单的列。

ind = zip(*[pat0+pat1])
named_ind = pandas.MultiIndex.from_tuples(ind, names = ['Patients'])
df = pandas.DataFrame({'T1avg':ser})
df['Slice']=pandas.Series(numpy.append(slc, slc), index=df.index)

如果您必须在切片上进行选择,您仍然可以这样做:

df[df['Slice']=='Slice 4']

将为所有患者提供 Slice 4。请注意,这如何消除了为所有患者设置该行的需要。

只要您的新数据框 (df2) 定义了相同的索引,您现在就可以非常简单地加入该索引:

df.join(df2)

你会得到

               T1avg    Slice Tx Group   Tumour Type Imaging Sessions
Patients                                                         
NecS3Hs05      0  Slice 0  Control  subcutaneous                2
NecS3Hs05      0  Slice 1  Control  subcutaneous                2
NecS3Hs05      0  Slice 2  Control  subcutaneous                2
NecS3Hs05      0  Slice 3  Control  subcutaneous                2
NecS3Hs05      0  Slice 4  Control  subcutaneous                2
NecS3Hs05      0  Slice 5  Control  subcutaneous                2
NecS3Hs06      0  Slice 0  Treated    orthotopic                3
NecS3Hs06      0  Slice 1  Treated    orthotopic                3
NecS3Hs06      0  Slice 2  Treated    orthotopic                3
NecS3Hs06      0  Slice 3  Treated    orthotopic                3
NecS3Hs06      0  Slice 4  Treated    orthotopic                3
NecS3Hs06      0  Slice 5  Treated    orthotopic                3
于 2013-08-28T06:52:55.997 回答