我有一个基于不同气象站的数据集,用于几个变量(温度,压力等),
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的集合总和。 ..]小于阈值。
答案 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