Wie wählt man eine Teilmenge von Werten aus einer benannten Spaltenebene in einem DataFrame aus?

8

Nehmen wir an, wir haben eine DataFrame mit mehreren Ebenen von Spaltenüberschriften.

%Vor%

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 :

  1. pandas dataframe wählt Spalten im Multiindex
  2. aus
  3. Eine Spalte mit mehreren Indizes / Headern geben
bluprince13 06.08.2017, 20:53
quelle

2 Antworten

6

Sie können reindex verwenden:

%Vor%

Die resultierende Ausgabe:

%Vor%     
root 15.08.2017, 21:36
quelle
3

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).

%Vor%

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.

%Vor%

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:

%Vor%

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 :

ändern %Vor%

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.

    
Alexander 06.08.2017 21:05
quelle