代码之家  ›  专栏  ›  技术社区  ›  xiaoshir

如何在多索引数据帧中删除空级别

  •  1
  • xiaoshir  · 技术社区  · 8 年前

    我有一个像这样的df:

    mux = pd.MultiIndex(levels=[['A', 'B', 'C', 'D']],labels=[[2, 3, 0, 1]])
    df = pd.DataFrame({'a':range(4)}, index=mux)
    

    如何删除空级别以形成单个索引df?我试过了

    pd.MultiIndex.droplevel(df, level=0)
    

    但出现了以下错误:

    AttributeError: 'DataFrame' object has no attribute 'levels'
    

    我哪里弄错了?

    我也尝试过以下方法,但由于某种原因,索引匹配会变得混乱(例如,“a”的原始行与“b”匹配),即使我使用它。 sort_index

    df.index=df.index.levels[0]
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   jezrael    8 年前

    使用 get_level_values 带后分配或带 set_index 因为它是 MultiIndex 只有一个级别:

    mux = pd.MultiIndex(levels=[['A', 'B', 'C', 'D']],
           labels=[[2, 3, 0, 1]])
    
    df = pd.DataFrame({'a':range(4)}, index=mux)
    print (df)
       a
    C  0
    D  1
    A  2
    B  3
    
    df.index = df.index.get_level_values(0)
    print (df.index )
    Index(['C', 'D', 'A', 'B'], dtype='object')
    
    print (df)
       a
    C  0
    D  1
    A  2
    B  3
    

    或:

    df = df.set_index(df.index.get_level_values(0))
    print (df.index)
    Index(['C', 'D', 'A', 'B'], dtype='object')