我有一个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
例如。有没有办法从上面裁剪的数据帧(df2
)中获取第二级的名称(即1
、2
等)或者应该我事先就知道他们可以这样称呼:
df2.loc[idx['Open', '1'], :]
为了说清楚,我知道 0 级名称('Open'
、'Close'
),但忽略第二级。有没有办法获取它们以便在上面的语法中使用它们?
最佳答案
我认为需要MultiIndex.remove_unused_levels
首先获取 level 的值:
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')
如果选择第二个关闭
级别,可以更好地看到差异:
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')
关于python - 获取多索引数据帧第二层的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50327625/