如何基于阈值删除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
相关产品推荐
相关产品推荐

