我有一个像这样的
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
如果
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'
如果丢失。