如何获取熊猫多级索引条目的内容?

时间:2019-03-27 15:57:29

标签: python pandas

我设置了一个熊猫数据框,除了我的数据外,还使用MultiIndex像这样存储了各自的单位:

Name    Relative_Pressure         Volume_STP
Unit                    -              ccm/g
Description          p/p0   
0                0.042691            29.3601
1                0.078319            30.3071
2                0.129529            31.1643
3                0.183355            31.8513
4                0.233435            32.3972
5                0.280847            32.8724

现在我可以例如仅提取Volume_STP数据,

Unit            ccm/g
Description 
0             29.3601
1             30.3071
2             31.1643
3             31.8513
4             32.3972
5             32.8724

使用.values,我可以获得一个数据的numpy数组。但是,如何获取存储的单位?我无法弄清楚接收存储的ccm/g字符串需要做什么。

编辑:添加了如何生成数据框的示例

假设我有一个看起来像这样的字符串:

                      Relative                                                  Volume @ STP
                      Pressure                                                         
                                                                                    cc/g

                         4.26910e-02                                                29.3601
                         7.83190e-02                                                30.3071
                         1.29529e-01                                                31.1643
                         1.83355e-01                                                31.8513
                         2.33435e-01                                                32.3972
                         2.80847e-01                                                32.8724
                         3.34769e-01                                                33.4049
                         3.79123e-01                                                33.8401

然后我使用此功能:

def read_result(contents, columns, units, descr):
    df = pd.read_csv(StringIO(contents), skiprows=4, delim_whitespace=True,index_col=False,header=None)
    df.drop(df.index[-1], inplace=True)
    index = pd.MultiIndex.from_arrays((columns,  units, descr))
    df.columns = index
    df.columns.names = ['Name','Unit','Description']
    df = df.apply(pd.to_numeric)
    return df

像这样

def isotherm(contents):
    columns = ['Relative_Pressure','Volume_STP']
    units = ['-','ccm/g']
    descr = ['p/p0','']
    df = read_result(contents, columns, units, descr)
    return df

在我的问题开始时生成DataFrame。

3 个答案:

答案 0 :(得分:1)

由于df具有作为列的MultiIndex,因此df.Volume_STP仍然是熊猫DataFrame。因此,您仍然可以访问其columns属性,并且相关项将位于索引0,因为数据框仅包含1系列。

因此,您可以通过以下方式提取名称:

print(df.Volume_STP.columns[0])

应提供:('ccm/g', '')

最后,您使用.colums[0][0]提取单位,并使用.columns[0][1]提取说明

答案 1 :(得分:1)

您可以执行以下操作:

df.xs('Volume_STP', axis=1).columns.remove_unused_levels().get_level_values(0).tolist()[0]

输出:

'ccm/g'

使用xs从“ Volume_STP”中切片数据帧,然后选择列,删除列标题中未使用的部分,然后获取该切片的最顶层(即单位)的值。转换为列表,然后选择第一个值。

答案 2 :(得分:0)

访问多索引/列上的值的一种通用方法是使用数据帧的index.get_level_valuescolumns.get_level_values函数。

在您的示例中,尝试df.columns.get_level_values(1)访问多级列“单位”的第二级。如果您已经选择了一个列,例如说“ Volume_STP”,那么您已经删除了顶层,在这种情况下,您的单位将处于第0级。