我有一个基于不同气象站的数据集,
stationID | Time | Temperature | ... ----------+------+-------------+------- 123 | 1 | 30 | 123 | 2 | 31 | 202 | 1 | 24 | 202 | 2 | 24.3 | 202 | 3 | NaN | ...
我想删除具有多个NaN的’stationID’组。例如,如果我键入:
**>>> df.groupby('stationID')**
然后,我想删除一个组中至少具有一定数量的NaN(例如30个)的组。据我了解,我不能将dropna(thresh = 10)与groupby一起使用:
**>>> df2.groupby('station').dropna(thresh=30)** *AttributeError: Cannot access callable attribute 'dropna' of 'DataFrameGroupBy' objects...*
那么,用熊猫做到这一点的最佳方法是什么?
你可以做的IIUC df2.loc[df2.groupby('station')['Temperature'].filter(lambda x: len(x[pd.isnull(x)] ) < 30).index]
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值的组