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

如何高效筛选出满足指定mask条件行数≥2的Pandas分组?

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

原始DataFrame

import pandas as pd
df = pd.DataFrame({
    'a': [10, 20, 30, 50, 50, 50, 4, 100],
    'b': [30, 3, 200, 25, 24, 31, 29, 2],
    'd': list('aaabbbcc')
})

期望输出

a    b  d
0  10   30  a
1  20    3  a
2  30  200  a

需求说明

按列d进行分组,筛选出满足**b > a的行数≥2**的分组。

现有实现方案

out = df.groupby('d').filter(lambda x: len(x.loc[x.b.gt(x.a)]) >= 2)

更优高效实现方法

下面是性能更优的向量化实现方式,尤其适合大数据量场景:

# 1. 计算全局掩码:标记每行是否满足b > a
mask = df['b'] > df['a']
# 2. 统计每个分组中满足条件的行数,筛选出行数≥2的分组
valid_groups = df[mask].groupby('d').size() >= 2
# 3. 获取符合条件的分组标签
valid_d_values = valid_groups[valid_groups].index
# 4. 从原始DataFrame中筛选出属于有效分组的行
out = df[df['d'].isin(valid_d_values)]

优势说明

  • 避免了filter方法中逐组执行lambda的循环操作,全部采用Pandas向量化API,性能提升显著
  • 仅计算一次全局掩码,减少重复计算开销
  • 分组统计和筛选逻辑清晰,可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:26:06