2 回答
TA贡献1804条经验 获得超8个赞
设置
idx = pd.MultiIndex.from_product([range(2), [*'XY']], names=['lvl0', 'lvl1'])
df = pd.DataFrame(1, idx, idx)
df
lvl0 0 1
lvl1 X Y X Y
lvl0 lvl1
0 X 1 1 1 1
Y 1 1 1 1
1 X 1 1 1 1
Y 1 1 1 1
MultiIndex 的基本剖析
levels
是frozenlist的pandas.Index对象。这些pandas.Index对象中的每一个都应包含唯一值。如果这些级别索引对象不是唯一的,则可能有问题。
[*map(type, df.index.levels)]
[pandas.core.indexes.numeric.Int64Index, pandas.core.indexes.base.Index]
你可以得到他们的 dtype
[l.dtype for l in df.index.levels]
[dtype('int64'), dtype('O')]
labels
这是一个frozenlist数组。每个级别索引都有一个标签数组。相应的标签数组包含对正在显示的级别值的引用。
[*map(type, df.index.labels)]
[pandas.core.indexes.frozen.FrozenNDArray,
pandas.core.indexes.frozen.FrozenNDArray]
print(*df.index.labels, sep='\n')
FrozenNDArray([0, 0, 1, 1], dtype='int8')
FrozenNDArray([0, 1, 0, 1], dtype='int8')
get_level_values
您可以访问索引中的值 get_level_values
df.index.get_level_values(1)
Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')
这level与用label对象切片对象相同
df.index.levels[1][df.index.labels[1]]
Index(['X', 'Y', 'X', 'Y'], dtype='object', name='lvl1')
TA贡献1811条经验 获得超5个赞
使用 get_level_values
df.index.get_level_values(0).dtype
Out[19]: dtype('int64')
添加回答
举报