Se eu tenho um índice de coluna multinível:
>>> cols = pd.MultiIndex.from_tuples([("a", "b"), ("a", "c")])
>>> pd.DataFrame([[1,2], [3,4]], columns=cols)
uma --- + - b c - + --- + - 0 1 | 2 1 | 3 4
Como posso descartar o nível "a" desse índice, terminando com:
b c - + --- + - 0 1 | 2 1 | 3 4
droplevel
obras pode trabalhar em índices quer multinível ou colunas através do parâmetroaxis
.Respostas:
Você pode usar
MultiIndex.droplevel
:fonte
>>> df.columns = df.columns.droplevel(0)
>>> df.index = df.index.droplevel(1)
df.columns.droplevel()
não está mais disponível.>>>df.columns = df.columns.droplevel(2) >>>df.columns = df.columns.droplevel(0)
Outra maneira de eliminar o índice é usar uma compreensão de lista:
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':
A queda do nível superior deixaria duas colunas com o índice 'y'. Isso pode ser evitado juntando os nomes à compreensão da lista.
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.
fonte
[col[1] for col in df.columns]
é mais diretamentedf.columns.get_level_values(1)
.[col[0] if col[1] == '' else col[1] for col in df.columns]
Outra maneira de fazer isso é reatribuir com
df
base em uma seção transversaldf
, usando o método .xs .fonte
b
) em seguida, solte esse nível e ficar com o primeiro nível (a
), o seguinte iria funcionar:df = df.xs('b', axis=1, level=1, drop_level=True)
A partir do Pandas 0.24.0 , agora podemos usar o DataFrame.droplevel () :
Isso é muito útil se você deseja manter a cadeia de métodos do DataFrame rolando.
fonte
Você também pode conseguir isso renomeando as colunas:
df.columns = ['a', 'b']
Isso envolve uma etapa manual, mas pode ser uma opção, especialmente se você renomear seu quadro de dados.
fonte
df.columns.get_level_values(1)
.Um pequeno truque usando
sum
com level = 1 (trabalhe quando level = 1 for único)Solução mais comum
get_level_values
fonte
Eu lutei com esse problema, pois não sei por que minha função droplevel () não funciona. Trabalhe em várias e aprenda que 'a' na tabela é o nome das colunas e 'b', 'c' são o índice. Faça assim ajudará
fonte