将单个 pandas 索引转换为 python 中的三级 MultiIndex
Converting a single pandas index into a three level MultiIndex in python
我在 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]` 之类的东西(或至少具有这种效果的东西)来访问数据。
你可以先replace
unnecessary strings (index has to be converted to Series
by to_series
, because replace
doesnt work with index
yet) and then use split
. Last set index names by 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
我在 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]` 之类的东西(或至少具有这种效果的东西)来访问数据。
你可以先replace
unnecessary strings (index has to be converted to Series
by to_series
, because replace
doesnt work with index
yet) and then use split
. Last set index names by 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