Ich habe eine Beispiel-Pandas-Dataframe df
, die multi_level index:
und stk_list
sind als stk_list = ['600106','300204','300113']
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:
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?
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%