微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python pandas – 根据集体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的总和小于阈值.

解决方法:

这应该工作:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐