Ich habe einen Multi-Index-Datenrahmen mit den Spalten 'A' und 'B'.
Gibt es eine Möglichkeit, Zeilen durch Filtern nach einer Spalte des Multi-Index auszuwählen, ohne den Index auf einen einzelnen Spaltenindex zurückzusetzen?
Beispielsweise.
# has multi-index (A,B)
df
#can I do this? I know this doesn't work because the index is multi-index so I need to specify a tuple
df.ix[df.A ==1]
python
pandas
dataframe
multi-index
Schalldämpfer
quelle
quelle
Antworten:
Eine Möglichkeit ist die Verwendung der
get_level_values
Indexmethode:In 0.13 können Sie
xs
mitdrop_level
Argument verwenden :Hinweis: Wenn dies eine Spalte MultiIndex anstelle eines Index wäre, könnten Sie dieselbe Technik verwenden:
quelle
Sie können auch verwenden,
query
was meiner Meinung nach sehr lesbar und einfach zu verwenden ist:Für das, was Sie sich vorgestellt haben, können Sie jetzt einfach Folgendes tun:
Sie können auch komplexere Abfragen mit verwenden
and
und
or
Sie können auch auf verschiedenen Indexebenen abfragen , z
wird zurückkehren
Wenn Sie Variablen in Ihrer Abfrage verwenden möchten, können Sie Folgendes verwenden
@
:quelle
df.query('A == 1 or C >= 8')
df.query()
problemlos mit Variablen, wenn auf sie mit einem '@' innerhalb des Ausdrucks in der Abfrage verwiesen wird, z. B.df.query('A == @var
für eine Variablevar
in der Umgebung.Sie können verwenden
DataFrame.xs()
:Wenn Sie die
A
Ebenedrop_level
beibehalten möchten (das Schlüsselwortargument ist nur ab Version 0.13.0 verfügbar):quelle
Das Verständnis , wie man Zugang Multi-indexierte Pandas Datenrahmen können Sie mit allen Arten von Aufgaben wie das helfen.
Kopieren Sie diese und fügen Sie sie in Ihren Code ein, um ein Beispiel zu generieren:
Wird Ihnen einen Tisch wie diesen geben:
Standardzugriff nach Spalte
Zugriff per Zeile
Multi-Index schneiden
quelle
ValueError: cannot handle a non-unique multi-index!
FehlerSie können verwenden
DataFrame.loc
:Beispiel
quelle
df.loc[0], df.loc[1]....df.loc[n]
Eine weitere Option ist:
quelle