当前位置: 代码迷 >> python >> 从MultiIndex中删除单个(子)列
  详细解决方案

从MultiIndex中删除单个(子)列

热度:87   发布时间:2023-07-16 09:39:11.0

我有以下数据帧df

    col1        col2        col3
    a     b     a     b     a     b       
1   ...
2
3

并且无法弄清楚如何只丢弃一个' df.col1.a ',例如df.col1.a

我可以df.col1.drop('a', axis=1) ,但是重新分配它就像df.col1=df.col1.drop('a', axis=1)失败。

我理解的逻辑结构df.colums ,但我该如何修改呢?

是一种非常灵活的方法,有很多种方法可以使用它:

In [11]: mi = pd.MultiIndex.from_product([['col1', 'col2', 'col3'], ['a', 'b']])

In [12]: df = pd.DataFrame(1, index=[0], columns=mi)

In [13]: df
Out[13]:
   col1     col2     col3
      a  b     a  b     a  b
0     1  1     1  1     1  1

使用元组删除单个列:

In [14]: df.drop(('col1', 'a'), axis=1)
Out[14]:
   col1  col2     col3
      b     a  b     a  b
0     1     1  1     1  1

或使用元组列表的列表:

In [15]: df.drop([('col1', 'a'), ('col2', 'b')], axis=1)
Out[15]:
   col1  col2  col3
      b     a     a  b
0     1     1     1  1

或在一个水平,例如,所有的a S:

In [16]: df.drop('a', level=1, axis=1)
Out[16]:
   col1  col2  col3
      b     b     b
0     1     1     1

在0.14中,你还可以通过正则表达式删除...

还有一种方法可以删除索引/列的整个级别:

In [21]: df.columns.droplevel(1)
Out[21]: Index([u'col1', u'col1', u'col2', u'col2', u'col3', u'col3'], dtype='object')