如何基于两列筛选表格:若ID存在Test为A的记录则保留其全部关联行
按ID关联特征的表格筛选实现
我有一张包含多列的表格,现需基于其中两列完成数据筛选,原表结构如下:
ID Test 1 A 1 B 1 C 2 B 2 D 3 A 4 A 4 C 4 D 5 B 5 C
我的需求是:若某个ID对应的记录中存在Test值为“A”的情况,则保留该ID关联的所有行,筛选后的目标表格如下:
ID Test 1 A 1 B 1 C 3 A 4 A 4 C 4 D
核心实现思路
这个需求本质是按ID分组的特征做整组筛选,不需要逐行判断每行的Test值,操作路径非常清晰:
- 先把Test列值为"A"的所有ID挑出去重,形成符合资格的ID名单
- 原表中凡是ID在这个名单里的行,全部保留,不管该行自身的Test值是什么
常用工具的实现方式
- Excel 操作
先筛选Test列等于"A"的行,把对应的ID值复制到空白区域并删除重复值,得到有效ID名单;再用COUNTIF函数逐行判断原表ID是否在名单范围内,把计算结果大于0的行筛选出来即可。 - SQL 实现
通过子查询先取出有效ID集合,再和原表做内连接,直接输出匹配结果即可,参考代码:SELECT t.* FROM 你的表名 t INNER JOIN ( SELECT DISTINCT ID FROM 你的表名 WHERE Test = 'A' ) qualified ON t.ID = qualified.ID - Pandas 实现
利用内置的集合匹配方法可以快速完成筛选,参考代码:# 提取符合要求的ID列表 qualified_ids = df.loc[df["Test"] == "A", "ID"].unique() # 筛选保留所有匹配ID的整行数据 filtered_df = df[df["ID"].isin(qualified_ids)]
内容的提问来源于stack exchange,提问作者Piazza
相关产品推荐
相关产品推荐

