获取多索引数据帧的第二级名称

时间:2018-05-14 09:58:27

标签: python pandas

我的格式为MultiIndex DataFrame

df
                0         1         2         3
Open  1  1.046031 -1.653869  1.039417  0.029429
      2  0.149056 -1.572694  0.562478 -0.974489
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

我可以使用以下内容获取第一级数据:

df2 = df.xs('Open', level=0, drop_level=False)

               0         1         2         3
Open 1  1.046031 -1.653869  1.039417  0.029429
     2  0.149056 -1.572694  0.562478 -0.974489
例如,

。有没有办法从上面的裁剪数据框(1)获取第二级的名称(即2df2等),或者我应该事先知道它们是否可以像:

df2.loc[idx['Open', '1'], :]

为清楚起见,我知道0级名称('Open''Close'),但忽略第二级。有没有办法让它们在上面的语法中使用它们?

2 个答案:

答案 0 :(得分:1)

我认为先需要MultiIndex.remove_unused_levels,然后获取级别值

print (df2.index.remove_unused_levels().levels[1])
Int64Index([1, 2], dtype='int64')

或者:

print (df2.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 2], dtype='int64')

如果选择第二个Close级别,则更好地看到差异:

df22 = df.xs('Close', level=0, drop_level=False)
print (df22)
                0         1         2         3
Close 1 -0.475074 -0.052126 -2.124979 -1.918538
      1  0.862663  0.405697  0.455616 -0.542472

#get default index values - not what need
print (list(df22.index.levels[1]))
[1, 2]

#get unique values without all levels
print (df22.index.remove_unused_levels().levels[1])
Int64Index([1], dtype='int64')

#get values if index
print (df22.index.remove_unused_levels().get_level_values(1))
Int64Index([1, 1], dtype='int64')

答案 1 :(得分:0)

您可以将索引功能应用于数据框。它为您提供级别和标签。如果你想得到2级名字:

list(df.index.levels[1])

['1', '2']