【问题标题】:Dropping a single (sub-) column from a MultiIndex从 MultiIndex 中删除单个(子)列
【发布时间】:2014-04-19 06:36:44
【问题描述】:

我有以下数据框df

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

只是无法弄清楚如何只删除一个“子级别”,例如df.col1.a

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

逻辑结构df.colums我明白了,但是我应该怎么修改呢?

【问题讨论】:

    标签: python indexing pandas multi-index


    【解决方案1】:

    Drop是一种非常灵活的方法,使用方法也不少:

    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
    

    或跨越一个级别,例如全部as:

    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')
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多