我需要过滤具有不同组的数据帧。数据帧如下所示:
df = pd.DataFrame({"group":[1,1,1,
2,2,2,2,
3,3,3,
4,4],
"percentage":[70,70,70,
45,80,60,70,
71,85,90,
np.nan, np.nan]})
我的目标是返回一个只包含满足以下两个条件之一的组的数据帧:
- 该组的所有观察结果具有百分比>70
- 该小组的所有观察结果均为np.nan
我知道我必须首先对数据帧进行分组,然后应用条件。使用for循环可以很容易地完成这项工作。然而,使用这样的解决方案可能非常缓慢。如有任何帮助,我们将不胜感激。
您可以尝试使用filter
df = df.groupby('group').filter(lambda x : x['percentage'].gt(70).all() | x['percentage'].isna().all() )
Out[25]:
group percentage
7 3 71.0
8 3 85.0
9 3 90.0
10 4 NaN
11 4 NaN
USE-df[(df.percentage > 70) | df['percentage'].isnull()]
输出-
group percentage
4 2 80.0
7 3 71.0
8 3 85.0
9 3 90.0
10 4 NaN
11 4 NaN