Wie filtert man Reihen von Pandas-Datenrahmen, indem man prüft, ob der Indexwert einer Unterebene innerhalb einer Liste liegt?

7

Ich habe eine Beispiel-Pandas-Dataframe df , die multi_level index:

hat %Vor%

und stk_list sind als stk_list = ['600106','300204','300113']

definiert

Ich möchte die Zeilen von df erhalten, deren Wert für sub_level index STK_ID in stk_list liegt. Die Ausgabe ist wie folgt:

%Vor%

Grundsätzlich kann ich das Ziel für diese Beispieldaten erreichen durch:

%Vor%

Aber ich habe bereits Spalten 'STK_ID' & amp; 'RPT_Date' in meinem Anwendungsdatenframe, so dass reset_index () einen Fehler verursacht. Wie auch immer, ich möchte direkt gegen Index statt Spalten filtern.

Lernen Sie daraus: Filtern nach Unterebene Index in Pandas

Ich probiere df[df.index.map(lambda x: x[0].isin(stk_list))] und Pandas 0.8.1 gibt AttributeError: 'unicode' object has no attribute 'isin' ,

Meine Frage: Wie filtere ich die Zeilen eines Pandas-Datenrahmens, indem ich überprüfe, ob der Indexwert innerhalb einer Liste ohne den reset_index() & amp; set_index() Methoden?

    
bigbug 18.11.2012, 09:56
quelle

5 Antworten

10

Sie können versuchen:

%Vor%

Beispiel:

%Vor%     
Avaris 19.11.2012, 11:48
quelle
11

Wie wäre es mit dem Parameter level in DataFrame.reindex ?

%Vor%     
Chang She 19.11.2012 04:26
quelle
7

Ich bin ziemlich spät auf der Party, aber sicherlich die am besten lesbare und intuitive Art, dies zu tun, ist index.levels[n].isin ?

Es funktioniert so:

%Vor%

Was ich an diesem Ansatz mag, ist, dass der Befehl virtuell wie ein englischer Satz gelesen werden kann.

ps. Im OP ist die stk_list eine Liste von Strings. Ein bisschen List-Verständnis-Fu wird damit umgehen:

%Vor%     
LondonRob 13.07.2015 13:00
quelle
1

Für mich funktionierte es nur, wenn ich die Null wie folgt aus dem x nehme:

%Vor%     
tsando 23.04.2016 18:00
quelle
0

get_level_values :

%Vor%     
Shoresh 25.01.2017 20:58
quelle

Tags und Links