我在pandas数据框中有一些数据,如下所示:
gene VIM
time:2|treatment:TGFb|dose:0.1 -0.158406
time:2|treatment:TGFb|dose:1 0.039158
time:2|treatment:TGFb|dose:10 -0.052608
time:24|treatment:TGFb|dose:0.1 0.157153
time:24|treatment:TGFb|dose:1 0.206030
time:24|treatment:TGFb|dose:10 0.132580
time:48|treatment:TGFb|dose:0.1 -0.144209
time:48|treatment:TGFb|dose:1 -0.093910
time:48|treatment:TGFb|dose:10 -0.166819
time:6|treatment:TGFb|dose:0.1 0.097548
time:6|treatment:TGFb|dose:1 0.026664
time:6|treatment:TGFb|dose:10 -0.008032
其中左边是索引。这只是数据的一个小节,实际上要大得多。该指数由三个部分组成,时间,治疗和剂量。我想重新组织这些数据,以便我可以通过切片轻松访问它。这样做的方法是使用pandas MultiIndexing,但我不知道如何将我的DataFrame与一个索引转换为另一个索引。有人知道怎么做这个吗?
为了澄清,这里所需的输出是具有三级指数的相同数据,外部是治疗,中间是剂量,内部是时间。这将是有用的,因此我可以使用类似df['time']['dose']
或' df [0]`(或至少具有该效果的东西)来访问数据。
答案 0 :(得分:1)
您可以先replace
个不必要的字符串(索引必须to_series
转换为Series
,因为replace
尚未与index
合作,然后使用split
。最后设置的索引名称由rename_axis
设置(pandas
0.18.0
中的新内容)
df.index = df.index.to_series().replace({'time:':'','treatment:': '','dose:':''}, regex=True)
df.index = df.index.str.split('|', expand=True)
df = df.rename_axis(('time','treatment','dose'))
print (df)
VIM
time treatment dose
2 TGFb 0.1 -0.158406
1 0.039158
10 -0.052608
24 TGFb 0.1 0.157153
1 0.206030
10 0.132580
48 TGFb 0.1 -0.144209
1 -0.093910
10 -0.166819
6 TGFb 0.1 0.097548
1 0.026664
10 -0.008032