【问题标题】:How to select nested columns in a multi-indexed pandas dataframe如何在多索引熊猫数据框中选择嵌套列
【发布时间】:2018-06-19 23:05:54
【问题描述】:

我创建了一个这样的 3D Pandas 数据框:

A=  ['ECFP', 'ECFP', 'ECFP', 'FCFP', 'FCFP', 'FCFP', 'RDK5', 'RDK5', 'RDK5']

B = ['R', 'tau', 'RMSEc', 'R', 'tau', 'RMSEc', 'R', 'tau', 'RMSEc']

C = array([[ 0.1 ,  0.3 ,  0.5 ,   nan,  0.6 ,  0.4 ],
       [ 0.4 ,  0.3 ,  0.3 ,   nan,  0.4 ,  0.3 ],
       [ 1.2 ,  1.3 ,  1.1 ,   nan,  1.5 ,  1.  ],
       [ 0.4 ,  0.3 ,  0.4 ,  0.8 ,  0.1 ,  0.2 ],
       [ 0.2 ,  0.3 ,  0.3 ,  0.3 ,  0.5 ,  0.6 ],
       [ 1.  ,  1.2 ,  1.  ,  0.9 ,  1.2 ,  1.  ],
       [ 0.4 ,  0.7 ,  0.5 ,  0.4 ,  0.6 ,  0.6 ],
       [ 0.6 ,  0.5 ,  0.3 ,  0.3 ,  0.3 ,  0.5 ],
       [ 1.2 ,  1.5 ,  1.3 ,  0.97,  1.5 ,  1.  ]])

df = pd.DataFrame(data=C.T, columns=pd.MultiIndex.from_tuples(zip(A,B)))
df = df.dropna(axis=0, how='any')

最终的 Dataframe 如下所示:

  ECFP            FCFP            RDK5           
     R  tau RMSEc    R  tau RMSEc    R  tau RMSEc
0  0.1  0.4   1.2  0.4  0.2   1.0  0.4  0.6   1.2
1  0.3  0.3   1.3  0.3  0.3   1.2  0.7  0.5   1.5
2  0.5  0.3   1.1  0.4  0.3   1.0  0.5  0.3   1.3
4  0.6  0.4   1.5  0.1  0.5   1.2  0.6  0.3   1.5
5  0.4  0.3   1.0  0.2  0.6   1.0  0.6  0.5   1.0

如何仅获取所有类型数据(“ECFP”、“FCFP”、“RDK5”)的“R”值之间的相关矩阵?

【问题讨论】:

    标签: python pandas dataframe indexing multi-index


    【解决方案1】:

    使用IndexSlice:

    In [53]: df.loc[:, pd.IndexSlice[:, 'R']]
    Out[53]:
      ECFP FCFP RDK5
         R    R    R
    0  0.1  0.4  0.4
    1  0.3  0.3  0.7
    2  0.5  0.4  0.5
    4  0.6  0.1  0.6
    5  0.4  0.2  0.6
    

    【讨论】:

      【解决方案2】:

      通过使用slice

      df.loc[:,(slice(None),'R')]
      Out[375]: 
        ECFP FCFP RDK5
           R    R    R
      0  0.1  0.4  0.4
      1  0.3  0.3  0.7
      2  0.5  0.4  0.5
      4  0.6  0.1  0.6
      5  0.4  0.2  0.6
      

      【讨论】:

        【解决方案3】:

        两个答案都有效,但首先我必须使用 lextort,否则我会收到此错误:

        KeyError: 'MultiIndex Slicing requires the index to be fully lexsorted tuple len (2), lexsort depth (1)'
        

        解决办法是:

        df.sortlevel(axis=1, inplace=True)
        print "Correlation matrix of Pearson's R values among all feature vector types:"
        df.loc[:, pd.IndexSlice[:, 'R']].corr()
        

        【讨论】:

          猜你喜欢
          • 2018-05-28
          • 1970-01-01
          • 2014-10-01
          • 2017-03-12
          • 2017-10-30
          • 2020-01-12
          • 2016-09-01
          • 2014-04-04
          • 2021-06-21
          相关资源
          最近更新 更多