2016-07-25 14 views
4

Ich habe einen Datensatz auf verschiedene Wetterstationen für mehrere Variablen basiert (Temperatur, Druck, etc.),Python Pandas - Gruppe entfernen, basierend auf kollektive NaN zählen

stationID | Time | Temperature | Pressure |... 
----------+------+-------------+----------+ 
123  | 1 |  30  | 1010.5 | 
123  | 2 |  31  | 1009.0 | 
202  | 1 |  24  | NaN  | 
202  | 2 |  24.3 | NaN  | 
202  | 3 |  NaN  | 1000.3 | 
... 

Und ich möchte ‚stationID‘ entfernen Gruppen, die mehr als eine bestimmte Anzahl von NaNs haben (unter Berücksichtigung aller Variablen in der Zählung).

Wenn ich versuche,

df.loc[df.groupby('station')['temperature'].filter(lambda x: len(x[pd.isnull(x)]) < 30).index] 

es funktioniert, wie hier gezeigt: Python pandas - remove groups based on NaN count threshold

Aber das obige Beispiel berücksichtigt 'Temperatur' nur. Also, Wie kann ich die kollektive Summe der NaNs der verfügbaren Variablen berücksichtigen?: Ich möchte eine Gruppe entfernen, in der die kollektive Summe von NaNs in [variable1, variable2, variable3, ...] kleiner als ein Schwellenwert ist.

Antwort

5

sollte diese Arbeit:

df.groupby('stationID').filter(lambda g: g.isnull().sum().sum() < 4) 

Sie 4 mit einer Schwellenzahl ersetzen können Sie sie sein möchten.

df.groupby('stationID').filter(lambda g: g.isnull().sum().sum() < 4) 

    stationID Time Temperature Pressure 
0  123  1   30.0 1010.5 
1  123  2   31.0 1009.0 
2  202  1   24.0  NaN 
3  202  2   24.3  NaN 
4  202  3   NaN 1000.3 


df.groupby('stationID').filter(lambda g: g.isnull().sum().sum() < 3) 

    stationID Time Temperature Pressure 
0  123  1   30.0 1010.5 
1  123  2   31.0 1009.0 
+0

wow! es ist perfekt! – MaxU

+0

@MaxU Danke. Es scheint nicht so, als hätten wir eine Funktion, um über den Datenrahmen zu summieren. – Psidom

+1

Super !!! Ich danke dir sehr! – mmeclimate

Verwandte Themen