2016-07-25 50 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