gpt4 book ai didi

Python pandas - 根据 NaN 计数阈值删除组

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:30 24 4
gpt4 key购买 nike

我有一个基于不同气象站的数据集,

stationID | Time | Temperature | ...
----------+------+-------------+-------
123 | 1 | 30 |
123 | 2 | 31 |
202 | 1 | 24 |
202 | 2 | 24.3 |
202 | 3 | NaN |
...

而且我想删除“stationID”组,它有超过一定数量的 NaN。例如,如果我输入:

**>>> df.groupby('stationID')**

然后,我想删除在一个组中具有(至少)一定数量的 NaN(比如说 30)的组。据我了解,我不能将 dropna(thresh=10) 与 groupby 一起使用:

**>>> df2.groupby('station').dropna(thresh=30)**
*AttributeError: Cannot access callable attribute 'dropna' of 'DataFrameGroupBy' objects...*

那么,用 Pandas 做到这一点的最佳方法是什么?

最佳答案

IIUC 你能做到df2.loc[df2.groupby('station')['Temperature'].filter(lambda x: len(x[pd.isnull(x)] ) < 30).index]

例子:

In [59]:
df = pd.DataFrame({'id':[0,0,0,1,1,1,2,2,2,2], 'val':[1,1,np.nan,1,np.nan,np.nan, 1,1,1,1]})
df

Out[59]:
id val
0 0 1.0
1 0 1.0
2 0 NaN
3 1 1.0
4 1 NaN
5 1 NaN
6 2 1.0
7 2 1.0
8 2 1.0
9 2 1.0

In [64]:
df.loc[df.groupby('id')['val'].filter(lambda x: len(x[pd.isnull(x)] ) < 2).index]

Out[64]:
id val
0 0 1.0
1 0 1.0
2 0 NaN
6 2 1.0
7 2 1.0
8 2 1.0
9 2 1.0

所以这将过滤掉具有超过 1 个 nan 值的组

关于Python pandas - 根据 NaN 计数阈值删除组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com