我的格式为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
)获取第二级的名称(即2
,df2
等),或者我应该事先知道它们是否可以像:
df2.loc[idx['Open', '1'], :]
为清楚起见,我知道0级名称('Open'
,'Close'
),但忽略第二级。有没有办法让它们在上面的语法中使用它们?
答案 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']