Python pandas - 根据集体NaN计数删除组

时间:2016-07-25 18:20:20

标签: python pandas

我有一个基于不同气象站的数据集,用于几个变量(温度,压力等),

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的集合总和。 ..]小于阈值。

1 个答案:

答案 0 :(得分: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