在组上筛选DataFrame,其中一个组的所有元素都会填充各种条件中的一个



我需要过滤具有不同组的数据帧。数据帧如下所示:

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]})

我的目标是返回一个只包含满足以下两个条件之一的组的数据帧:

  1. 该组的所有观察结果具有百分比>70
  2. 该小组的所有观察结果均为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

最新更新