【发布时间】:2020-12-16 10:54:20
【问题描述】:
我遇到了 pd.MultiIndex 的奇怪行为,并试图了解发生了什么。与其说是寻找解决方案,不如说是解释。
假设我有一个 MultiIndexed 数据框:
index0 = pd.Index(['a', 'b', 'c'], name='let')
index1 = pd.Index(['foo', 'bar', 'baz'], name='word')
x = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], index=[index0, index1])
display(x)
0 1 2
let word
a foo 1 2 3
b bar 4 5 6
c baz 7 8 9
如果我随后使用 df.loc 获取该数据帧的一个子集:
sub = ['a', 'c']
y = x.loc[sub]
display(y)
0 1 2
let word
a foo 1 2 3
c baz 7 8 9
到目前为止,一切都很好。现在,查看新数据帧的索引:
display(y.index)
MultiIndex([('a', 'foo'),
('c', 'baz')],
names=['let', 'word'])
这也是有道理的。但是,如果我查看子集数据帧索引的特定级别...
display(y.index.levels[1])
Index(['bar', 'baz', 'foo'], dtype='object', name='word')
突然间我有了原始完整数据框的值,而不是选定的子集!
为什么会这样?
【问题讨论】:
标签: python pandas dataframe multi-index