You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效筛选满足组级条件的DataFrame:全量值>70或全为np.nan

高效筛选符合条件的分组DataFrame

原始数据

import pandas as pd
import numpy as np

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

需求

筛选满足以下任一条件的组,返回对应DataFrame:

  • 组内所有percentage观测值均大于70
  • 组内所有percentage观测值均为np.nan

高效解决方案

利用pandas的分组聚合+向量操作实现,避免循环,大幅提升效率:

方法1:分组聚合生成组掩码,再筛选

# 计算每个组是否符合条件
group_mask = df.groupby("group")["percentage"].agg(
    lambda x: x.gt(70).all() or x.isna().all()
)

# 筛选原DataFrame中符合条件的组
result_df = df[df["group"].isin(group_mask[group_mask].index)]

方法2:用transform直接生成行级掩码,一步筛选

# 生成每个行对应的组是否满足条件的布尔序列
cond_all_gt70 = df.groupby("group")["percentage"].transform(lambda x: x.gt(70).all())
cond_all_nan = df.groupby("group")["percentage"].transform(lambda x: x.isna().all())

# 合并条件筛选结果
result_df = df[cond_all_gt70 | cond_all_nan]

结果验证

最终返回的result_df包含组3(全大于70)和组4(全为NaN)的所有行:

group  percentage
7       3        71.0
8       3        85.0
9       3        90.0
10      4         NaN
11      4         NaN

内容的提问来源于stack exchange,提问作者MF1992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:33:16