Nehmen wir an, wir haben eine DataFrame
mit mehreren Ebenen von Spaltenüberschriften.
Ich möchte eine Liste von Spalten aus einer benannten Ebene auswählen.
%Vor%Methode 1: (veraltet zugunsten von df.loc)
%Vor%Das Problem dabei ist, dass ich die Ebene mit 0 angeben muss. Es schlägt fehl, wenn ich den Namen der Ebene verwende.
Methode 2:
%Vor%Das Problem dabei ist, dass ich nur einen einzelnen Wert angeben kann. Es schlägt fehl, wenn ich ['A', 'B'] verwende.
Methode 3:
%Vor%Das funktioniert, ist aber nicht so prägnant wie die beiden vorherigen Methoden! :)
Frage:
Wie kann ich Methode 1 oder 2 zum Funktionieren bringen? Oder gibt es einen mehr pythischen Weg?
Der MWE:
%Vor%Verwandte Fragen :
Haben Sie darüber nachgedacht, IndexSlice
zu verwenden? Im Allgemeinen müssen die Spalten zuerst sortiert werden (im ursprünglichen Datenrahmen waren sie bereits sortiert).
Aktualisieren
Die Methode, die Sie auswählen, hängt davon ab, warum Sie Ihre Daten zuerst auswählen und ob Sie Ihre Originaldaten über Ihre Auswahl ändern müssen.
Um das Beispiel etwas anspruchsvoller zu gestalten, verwenden wir zunächst einen MultiIndex-Datenrahmen, der über verschiedene Ebenen dieselben Werte aufweist und unsortiert ist.
%Vor%Geben Sie eine Kopie der Daten zurück
Wenn Sie die Daten entweder direkt oder für nachfolgende Berechnungen in einer Pipeline anzeigen müssen, verwenden Sie die Methode reindex
, die von @root erwähnt wird, und erläutert hier in der Dokumentation ist eine gute Option.
Allerdings , wenn Sie versuchen, diesen Datenrahmen zu ändern, werden die Änderungen nicht in Ihrem Original wiedergegeben.
%Vor%Ändern Sie die Daten
Eine alternative Methode ist die boolesche Indizierung mit loc
. Sie können ein Bedingungslistenverständnis verwenden, um die gewünschten Spalten zusammen mit get_level_values
auszuwählen:
Wenn Sie den Index anstelle der Spalten aufteilen, müsste man natürlich df.columns.get_level_values
in df.index.get_level_values
im obigen Code-Snippet ändern.
Sie können die ursprünglichen Daten auch mit loc
:
Fazit
Obwohl select
eine gute Option ist, um eine Ansicht Ihrer multi-indizierten Daten zurückzugeben, können Sie mit der booleschen Indizierung mit loc
Ihre Daten anzeigen oder ändern.
Anstelle von Methode 1 oder Methode 2 würde ich den oben beschriebenen Ansatz loc
verwenden.
Ab Pandas 0.20.0 wurde die ix
-Methode veraltet. Ich würde Methode 3 nicht empfehlen.
Tags und Links python pandas multi-index dataframe