2017-01-24 5 views
1

I die folgenden Datenrahmen habenZeilen löschen, basierend auf einem Zustand, in pandas

In [62]: df 
Out[62]: 
      coverage name reports year 
Cochice   45 Jason  4 2012 
Pima    214 Molly  24 2012 
Santa Cruz  212 Tina  31 2013 
Maricopa   72 Jake  2 2014 
Yuma    85 Amy  3 2014 

Grundsätzlich i

df[df["coverage"] > 30 

die Zeilen wie unten filtern kann, und ich kann eine einzelne Zeile wie unten

Drop/löschen
df.drop(['Cochice', 'Pima']) 

Aber ich möchte eine bestimmte Anzahl von Zeilen basierend auf einer Bedingung löschen, wie kann ich das tun?

+0

Können Sie mehr erklären Ihre c Fortdauer? – jezrael

+0

Ich möchte Zeilen löschen, wenn der Wert der Coverage-Spalte in weniger als 72 –

+0

Dann boolean Indizierung verwenden - 'df [df [" Abdeckung "]> = 72]' – jezrael

Antwort

1

Das Beste ist boolean indexing aber müssen umkehren Zustand - bekommen alle Werte gleich und höher als 72:

print (df[df["coverage"] >= 72]) 
      coverage name reports year 
Pima    214 Molly  24 2012 
Santa Cruz  212 Tina  31 2013 
Maricopa   72 Jake  2 2014 
Yuma    85 Amy  3 2014 

Es ist die gleiche wie ge Funktion:

print (df[df["coverage"].ge(72)]) 
      coverage name reports year 
Pima    214 Molly  24 2012 
Santa Cruz  212 Tina  31 2013 
Maricopa   72 Jake  2 2014 
Yuma    85 Amy  3 2014 

Eine andere mögliche Lösung ist Invert-Maske durch ~:

print (df["coverage"] < 72) 
Cochice  True 
Pima   False 
Santa Cruz False 
Maricopa  False 
Yuma   False 
Name: coverage, dtype: bool 

print (~(df["coverage"] < 72)) 
Cochice  False 
Pima   True 
Santa Cruz  True 
Maricopa  True 
Yuma   True 
Name: coverage, dtype: bool 


print (df[~(df["coverage"] < 72)]) 
      coverage name reports year 
Pima    214 Molly  24 2012 
Santa Cruz  212 Tina  31 2013 
Maricopa   72 Jake  2 2014 
Yuma    85 Amy  3 2014 
Verwandte Themen