Heim >Backend-Entwicklung >Python-Tutorial >Wie wählt man Zeilen in Pandas MultiIndex DataFrames effizient aus?

Wie wählt man Zeilen in Pandas MultiIndex DataFrames effizient aus?

Susan Sarandon
Susan SarandonOriginal
2024-12-12 19:01:16269Durchsuche

How to Efficiently Select Rows in Pandas MultiIndex DataFrames?

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, :]
  • 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)
  • 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")
  • 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]
  • 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]

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]

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn