PythonPandas:从多级列索引中删除列?

qvsjd97n  于 2023-02-20  发布在  Python
关注(0)|答案(3)|浏览(162)

我有一个多级列表,如下所示:

a
   ---+---+---
    b | c | f
--+---+---+---
0 | 1 | 2 | 7
1 | 3 | 4 | 9

如何按名称删除列“c”?如下所示:

a
   ---+---
    b | f
--+---+---
0 | 1 | 7
1 | 3 | 9

我试过这个:

del df['c']

但是我得到了下面的错误,这是有道理的:
KeyError:“键长度(1)大于MultiIndex lexsort深度(0)”

juzqafwq

juzqafwq1#

已解决:

df.drop('c', axis=1, level=1)
mwg9r5ms

mwg9r5ms2#

对于多索引,我们必须使用元组来指定列,以便删除特定列,或者指定级别以删除该索引级别上具有该键的所有列。
不要说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
snvhrwxg

snvhrwxg3#

这对我不起作用。当添加'inplace=True'时才起作用。正确的语句是df.drop('c ',axis = 1,level = 1,inplace=True)

相关问题