代码之家  ›  专栏  ›  技术社区  ›  CiaranWelsh

用python将单个熊猫索引转换为三级MultiIndex

  •  1
  • CiaranWelsh  · 技术社区  · 8 年前

    我在熊猫数据框中有一些数据,如下所示:

    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]`”(或至少类似的东西)。

    1 回复  |  直到 8 年前
        1
  •  1
  •   jezrael    8 年前

    你可以先 replace 不必要的字符串(索引必须转换为 Series 通过 to_series 因为 代替 index yet)然后使用 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