Outra maneira de eliminar o índice é usar uma compreensão de lista:
df.columns = [col[1] for col in df.columns]
b c
0 1 2
1 3 4
Essa estratégia também é útil se você deseja combinar os nomes dos dois níveis, como no exemplo abaixo, onde o nível inferior contém dois 'y':
cols = pd.MultiIndex.from_tuples([("A", "x"), ("A", "y"), ("B", "y")])
df = pd.DataFrame([[1,2, 8 ], [3,4, 9]], columns=cols)
A B
x y y
0 1 2 8
1 3 4 9
A queda do nível superior deixaria duas colunas com o índice 'y'. Isso pode ser evitado juntando os nomes à compreensão da lista.
df.columns = ['_'.join(col) for col in df.columns]
A_x A_y B_y
0 1 2 8
1 3 4 9
Esse é um problema que tive depois de trabalhar em grupo e demorou um pouco para encontrar essa outra pergunta que a resolveu. Eu adaptei essa solução ao caso específico aqui.