2016-08-18 2 views
2

Ich habe ein Pandas Datenrahmen mit mehreren Gruppen und ich möchte Gruppen ausschließen, in denen einige Bedingungen (in einer bestimmten Spalte) nicht erfüllt sind. Z.B. Löschen Sie hier Gruppe B, weil sie in der Spalte "crit1" einen Nicht-Zahl-Wert haben.Löschen Pandas Gruppe basierend auf Bedingung

Ich könnte bestimmte Spalten basierend auf der Bedingung df.loc[:, (df >< 0).any(axis=0)] löschen, aber dann löscht es nicht die gesamte Gruppe.

Und irgendwie kann ich nicht den nächsten Schritt machen und dies auf die ganze Gruppe anwenden.

name crit1 crit2 
A  0.3  4 
A  0.7  6 
B  inf  4 
B  0.4  3 

So das Ergebnis nach dieser Filterung (nur Schwimmer ermöglichen) sein soll: kann

A  0.3  4 
A  0.7  6 

Antwort

1

Sie groupby und filter, für das Beispiel verwenden Sie Sie überprüfen können, geben, wenn np.inf in einer Gruppe vorhanden ist und filter unter der Bedingung:

import pandas as pd 
import numpy as np 
df.groupby('name').filter(lambda g: (g != np.inf).all().all()) 
# name crit1 crit2 
# 0 A  0.3  4 
# 1 A  0.7  6 

Wenn nur das Prädikat einer Spalte gilt, können Sie die Spalte überzugreifen können, zum Beispiel:

df.groupby('name').filter(lambda g: (g.crit1 != np.inf).all()) 
# name crit1 crit2 
# 0 A  0.3  4 
# 1 A  0.7  6 
+0

zuerst vielen Dank für die schnelle Antwort! Und wenn ich die Filterung nur auf eine bestimmte Spalte anwenden möchte (weil ich mich in den anderen nicht für 'inf' interessiere), muss ich die .all() anpassen? – Don

+0

Ja. Sie können die Spalte in der Lambda-Funktion angeben, siehe die aktualisierte Antwort. – Psidom

+0

ok, so habe ich mir das vorgestellt, aber dann bin ich noch zu neu um Python zu finden, vielen Dank! – Don

Verwandte Themen