降低多索引级别但保留列名 - pandas

问题描述 投票:0回答:1

我有一个像这样的

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)
有效,但
a
b
的名字消失了

              c1  c2
0  87    33   32  34
1  32    10   45  62
2  78    83   99  71
python pandas multi-index
1个回答
7
投票

如果

c

,您可以使用列表理解来选择第二级值
df.columns = [b if a == 'c' else a for a, b in df.columns]
print (df)
    a   b  c1  c2
0  87  33  32  34
1  32  10  45  62
2  78  83  99  71

旧pnadas版本的解决方案:

我想你可以使用

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

通过

['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
获取它solution是删除
[]
或添加参数
values='c'
如果丢失。

© www.soinside.com 2019 - 2024. All rights reserved.