Pandas实现按列分组后删除不含指定值的整组数据
Pandas 分组筛选保留包含指定列值的全部分组
实现方案
核心逻辑是通过分组判断,直接过滤掉不满足「指定列包含目标值」条件的整组数据,全程保持原始表的列结构不变,无需手动拼接分组结果。
1. 高效写法(推荐,大数据量性能更优)
用groupby + transform生成和原表等长的布尔掩码,直接做行筛选,没有额外的索引对齐开销:
import pandas as pd # 配置参数 target_value = "Pakistan" group_col = "Column_to_Be_Grouped" check_col = "search_value_per_group" # 核心筛选代码 bool_mask = df.groupby(group_col)[check_col].transform(lambda s: target_value in s.values) filtered_df = df[bool_mask].reset_index(drop=True)
2. 直观写法(小数据量可读性更好)
直接用groupby.filter逐组判断,符合逐组校验的思维逻辑:
filtered_df = df.groupby(group_col)\ .filter(lambda group: target_value in group[check_col].values)\ .reset_index(drop=True)
结果校验
针对描述的测试数据集:
- 原始数据共16条记录,分为Ehsan、Irshad、Ayesha、Zohan4个分组
- 筛选后共保留12条记录,剔除Irshad分组下的全部4条记录
- 输出结果的列顺序、列名和原始DataFrame完全一致
避坑提示:不要用循环遍历每个分组再拼接结果的写法,不仅代码冗余,还容易出现索引错乱、类型转换异常的问题。
内容的提问来源于stack exchange,提问作者Filbadeha
相关产品推荐
相关产品推荐

