Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Pandas-Datenrahmen oder -Serien mit mehreren Bedingungen effizient filtern?

Wie kann ich Pandas-Datenrahmen oder -Serien mit mehreren Bedingungen effizient filtern?

DDD
DDDOriginal
2024-10-20 11:56:02365Durchsuche

How to Efficiently Filter Pandas DataFrame or Series with Multiple Conditions?

Effizientes Filtern von Pandas-Datenrahmen oder -Serien mit mehreren Bedingungen

Pandas bietet eine Reihe von Methoden zum Filtern von Daten, darunter reindex(), apply() und map() . Bei der Anwendung mehrerer Filter wird jedoch die Effizienz zum Problem.

Für eine optimierte Filterung sollten Sie die Verwendung einer booleschen Indizierung in Betracht ziehen. Sowohl Pandas als auch Numpy unterstützen die boolesche Indizierung, die direkt auf dem zugrunde liegenden Datenarray arbeitet, ohne unnötige Kopien zu erstellen.

Hier ist ein Beispiel für die boolesche Indizierung:

<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>

Dieser Ausdruck gibt eine Pandas-Serie zurück, die enthält Nur die Zeilen, in denen die Werte in Spalte „col1“ größer oder gleich 1 sind.

Um mehrere Filter anzuwenden, verwenden Sie die logischen Operatoren „&“ (AND) und „|“ (ODER). Zum Beispiel:

<code class="python">df[(df['col1'] >= 1) &amp; (df['col1'] <=1 )]</code>

Dieser Ausdruck gibt einen DataFrame zurück, der nur die Zeilen enthält, in denen die Werte in Spalte „col1“ zwischen 1 und 1 (einschließlich) liegen.

Erwägen Sie für Hilfsfunktionen die Definition von Funktionen, die Nehmen Sie einen DataFrame und geben Sie eine boolesche Reihe zurück, sodass Sie mehrere Filter mithilfe logischer Operatoren kombinieren können.

<code class="python">def b(x, col, op, n):
    return op(x[col],n)

def f(x, *b):
    return x[(np.logical_and(*b))]</code>

Pandas 0.13 führt die Methode query() ein, die eine effizientere Möglichkeit bietet, komplexe Filterbedingungen auszudrücken. Unter der Annahme gültiger Spaltenbezeichner filtert der folgende Code DataFrame df basierend auf mehreren Bedingungen:

<code class="python">df.query('col1 <= 1 &amp; 1 <= col1')</code>

Zusammenfassend bietet die boolesche Indizierung eine effiziente Methode zum Anwenden mehrerer Filter auf Pandas-DataFrames oder -Serien, ohne unnötige Kopien zu erstellen. Verwenden Sie logische Operatoren und Hilfsfunktionen, um mehrere Filter für erweiterte Funktionalität zu kombinieren.

Das obige ist der detaillierte Inhalt vonWie kann ich Pandas-Datenrahmen oder -Serien mit mehreren Bedingungen effizient filtern?. 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