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

如何基于阈值删除Pandas中按Category列分组后不符合要求的行

Pandas按分组筛选的实现方案

核心思路

使用Pandas自带的分组过滤方法groupby.filter(),对每个Category分组做条件校验,仅保留符合要求的完整分组。

完整实现代码

import pandas as pd

# 构造示例数据(实际使用时替换为你自己的DataFrame读取逻辑即可)
data = {
    'Date': ['2015-06-02','2015-06-03','2015-06-04','2015-06-05',
             '2015-06-06','2015-06-07','2015-06-08','2015-06-09',
             '2015-06-10','2015-06-11','2015-06-12','2015-06-13',
             '2015-06-14','2015-06-15','2015-06-16','2015-06-17',
             '2015-06-18','2015-06-19'],
    'Category': [1,1,1,2,2,2,2,4,4,4,4,6,6,6,8,8,8,8],
    'Value': [2,9,2,2,8,11,2,2,5,12,2,2,8,2,2,6,10,2]
}
df = pd.DataFrame(data)

# 核心筛选逻辑:仅保留分组内存在≥10数值的分组
# 若需要额外校验分组首尾必须为2,可去掉下方两个条件的注释
result = df.groupby('Category').filter(
    lambda x: 
    # x['Value'].iloc[0] == 2 and 
    # x['Value'].iloc[-1] == 2 and 
    (x['Value'] >= 10).any()
)

# 输出验证结果
print(result)

逻辑说明

  • groupby('Category') 将整个DataFrame按Category列拆分为独立的子分组,每个分组对应同一个Category的所有行
  • filter() 方法对每个分组执行自定义校验逻辑:
    • (x['Value'] >= 10).any() 判断当前分组的Value列中是否存在至少一个大于等于10的值
    • 校验返回True则保留该分组的全部行,返回False则删除该分组的全部行
      运行后得到的result就是你要求的预期输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:04