删除多索引级别但保留列名 - pandas

drop multiindex level but keep names of columns - pandas

我有一个 df 看起来像这样

   a     b      c
              c1  c2
0  87    33   32  34
1  32    10   45  62
2  78    83   99  71

我想删除 c 级别但保留所有其他列名称

   a     b    c1  c2
0  87    33   32  34
1  32    10   45  62
2  78    83   99  71

df.columns = df.columns.droplevel(0) 有效,但 ab 的名称消失了

              c1  c2
0  87    33   32  34
1  32    10   45  62
2  78    83   99  71

我想你可以使用 set_index + droplevel + reset_index:

df = df.set_index(['a','b'])
df.columns = df.columns.droplevel(0)
df = df.reset_index()
print (df)
    a   b  c1  c2
0  87  33  32  34
1  32  10  45  62
2  78  83  99  71

select 列的另一个解决方案 ['c']:

df = df.set_index(['a','b'])['c'].reset_index()
print (df)
    a   b  c1  c2
0  87  33  32  34
1  32  10  45  62
2  78  83  99  71

但如果从 pivot_table 获取 则删除 [] 或添加参数 values='c' 如果缺少。