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

如何筛选Pandas DataFrame groupby聚合后满足数值阈值的分组

Pandas 对groupby聚合结果按阈值筛选分组

直接对分组聚合得到的序列做布尔索引筛选,就能保留符合聚合值阈值的分组,不需要额外复杂逻辑。


复现示例场景

首先构造测试数据:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Fred', 'Harry', 'Sonia', 'Pete', 'Tracy'],
    'Thing': ['Apple', 'Banana', 'Banana', 'Apple', 'Apple'],
    'Count': [1, 1, 1, 1, 1]
})

执行原有聚合逻辑:

agg_res = df.groupby(["Thing"])['Count'].sum()

得到的聚合输出为:

Thing
Apple     3
Banana    2
Name: Count, dtype: int64

注:原写法df.groupby(["Thing"]).sum()['Count']可以优化为上面的写法,分组时直接指定要聚合的Count列,避免无意义的全数值列聚合,运行效率更高。


实现聚合结果筛选

直接给聚合结果传入布尔判断条件做索引,就能保留聚合值大于指定阈值的分组,要保留Count总和大于2的分组,代码如下:

filtered_agg = agg_res[agg_res > 2]

执行后输出的结果为:

Thing
Apple    3
Name: Count, dtype: int64

扩展:如果需要保留原表中符合阈值的所有原始行

如果不是要聚合后的统计结果,而是要筛选原DataFrame里「所属分组聚合值满足阈值」的所有原始行,可以用groupby.filter方法:

# 筛选原表中,所属Thing分组的Count总和大于2的所有行
filtered_raw_df = df.groupby("Thing").filter(lambda group: group['Count'].sum() > 2)

执行后输出原表中所有Apple对应的行:

Name  Thing  Count
0   Fred  Apple      1
3   Pete  Apple      1
4  Tracy  Apple      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 13:12:28