对于多索引,我们必须使用元组指定列才能删除特定列,或者指定级别以删除该索引级别上具有该键的所有列。
而不是说drop column 'c'说drop ('a','c')如下图:
df.drop(('a', 'c'), axis = 1, inplace = True)
或者如下图指定级别
df.drop('c', axis = 1, level = 1)
让我们做一个简单的 df 来演示:
>>> cols = pd.MultiIndex.from_tuples([("a", "b"), ("a", "c"),
... ("a", "f"), ('x', 'c'),('x', 'f')])
>>> df = pd.DataFrame([[1,3, 7, 21, 8], [2, 4, 9, 21, 8]], columns=cols)
>>> df
a x
b c f c f
0 1 3 7 21 8
1 2 4 9 21 8
下面是如何从“a”中删除“c”
>>> df.drop(('a', 'c'), axis = 1)
a x
b f c f
0 1 7 21 8
1 2 9 21 8
使用三级索引,然后将该键包含在元组中以从底层删除,例如('a','c','k')
使用单个值作为索引,就像您所做的那样,它默认搜索顶级索引以查找匹配项,并删除该索引上的匹配项,或者如果键不在索引中,则抛出错误,就像您发现的那样。
所以在我的例子中,告诉它只删除“x”就可以了
>>> df.drop('x', axis = 1)
a
b c f
0 1 3 7
1 2 4 9
要删除具有第二个索引“c”的所有列,然后指定级别
>>> df.drop('c', axis = 1, level = 1)
a x
b f f
0 1 7 8
1 2 9 8