Zeilen im Pandas MultiIndex DataFrame auswählen
Problemzusammenfassung
Wie können wir bei einem Pandas DataFrame mit einem MultiIndex Zeilen basierend auf bestimmten Werten auswählen/ Beschriftungen in jeder Indexebene?
Schneiden mit loc
df.loc[key, :]
Nach dem Login kopieren
- key ist ein Tupel von Beschriftungen, eine für jede Indexebene.
- Dies bietet eine bequeme und übersichtliche Möglichkeit, Zeilen basierend auf bestimmten Werten in verschiedenen Ebenen auszuwählen.
Schneiden mit xs
df.xs(level_key, level=level_name, drop_level=True/False)
Nach dem Login kopieren
- level_key ist der Schlüssel für die spezifische Indexebene.
- drop_level steuert, ob die Ebene aus dem resultierenden DataFrame gelöscht werden soll.
- xs ist besonders nützlich, wenn auf einer einzelnen Ebene geschnitten wird.
Filtern mit Abfrage
df.query("condition")
Nach dem Login kopieren
- Bedingung ist ein boolescher Ausdruck, der die Filterung angibt Kriterien.
- Unterstützt flexibles Filtern über mehrere Indexebenen hinweg.
Verwendung von get_level_values
mask = df.index.get_level_values(level_name).isin(values_list)
selected_rows = df[mask]
Nach dem Login kopieren
- Erstellt eine boolesche Maske basierend auf den Werten in einem bestimmten Indexebene.
- Nützlich für komplexere Filtervorgänge oder beim Slicing auf mehrere Werte.
Beispiele
Beispiel 1: Auswählen von Zeilen mit bestimmten Werten in Ebene „eins“ und „zwei“:
# Using loc
selected_rows = df.loc[['a'], ['t', 'u']]
# Using xs
selected_rows = df.xs('a', level='one', drop_level=False)
selected_rows = selected_rows.xs(['t', 'u'], level='two')
# Using query
selected_rows = df.query("one == 'a' and two.isin(['t', 'u'])")
# Using get_level_values
one_mask = df.index.get_level_values('one') == 'a'
two_mask = df.index.get_level_values('two').isin(['t', 'u'])
selected_rows = df[one_mask & two_mask]
Nach dem Login kopieren
Beispiel 2: Filtern von Zeilen basierend auf einer numerischen Ungleichheit in der Ebene 'zwei':
# Using query
selected_rows = df.query("two > 5")
# Using get_level_values
two_mask = df.index.get_level_values('two') > 5
selected_rows = df[two_mask]
Nach dem Login kopieren
Tipps und Überlegungen
- Berücksichtigen Sie die Komplexität des Slicing-/Filtervorgangs und wählen Sie entsprechend die geeignete Methode aus.
- Für einfaches Slicing auf einer oder mehreren Ebenen werden loc oder xs bevorzugt.
- Für komplexe Filterung oder Wenn Sie mehrere Werte aufteilen, sollten Sie die Verwendung von query oder get_level_values in Betracht ziehen, da diese mehr Flexibilität bieten.
- Beachten Sie die Verwendung von pd.IndexSlice, um komplexe Aufteilungsvorgänge mit loc anzugeben.
- sort_index() kann die Leistung verbessern große DataFrames mit unsortierten MultiIndexes.
Das obige ist der detaillierte Inhalt vonWie wählt man Zeilen in Pandas MultiIndex DataFrames effizient aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!