2016-07-25 52 views
4

我有一個基於不同的氣象站幾個變量(溫度,壓力等)的數據集,Python的大熊貓 - 刪除組基於集體的NaN指望

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 | 
... 

而且我想刪除「的stationID」其中有超過一定數量的NaN(考慮到計數中的所有變量)。

如果我嘗試,

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

它的工作原理,如下所示:Python pandas - remove groups based on NaN count threshold

但上面的例子中考慮到了 '溫度' 而已。那麼,我該如何考慮可用變量的NaN的集體總和?即:我想刪除一個組,其中[variable1,variable2,variable3,...]中的NaN的總和小於閾值。

回答

5

這應該工作:

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

你可以用你想它是一個閾值數代替4

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

哇!這是完美的! – MaxU

+0

@MaxU謝謝。似乎我們沒有一個函數來整理數據框。 – Psidom

+1

真棒!非常感謝! – mmeclimate