Pandas筛选同时包含x和n36的唯一ID对应行问题
解决方法:筛选同时包含指定code值的ID对应的行
你的问题出在只过滤了code为x或n36的行,但没有确保这些行所属的ID同时拥有这两个code值——所以像999_c_133这种只有x没有n36的ID也被保留了。
这里有两种简洁的实现方式:
方法一:先获取符合条件的ID,再筛选目标行
# 第一步:找出同时包含"x"和"n36"的所有唯一ID valid_ids = df.groupby('ID').filter( lambda group: set(group['code']).issuperset({'x', 'n36'}) )['ID'].unique() # 第二步:筛选这些ID中code为"x"或"n36"的行 result = df[(df['ID'].isin(valid_ids)) & (df['code'].isin(['x', 'n36']))]
方法二:直接通过分组过滤+二次筛选
# 先过滤出所有属于"同时拥有x和n36"的ID的行 filtered_df = df.groupby('ID').filter( lambda group: ('x' in group['code'].values) and ('n36' in group['code'].values) ) # 再从中筛选出code为x或n36的行(如果不需要其他code的话) result = filtered_df[filtered_df['code'].isin(['x', 'n36'])]
执行后得到的result就是你要的预期结果:
| ID | code |
|---|---|
| 333_c_132 | x |
| 333_c_132 | n36 |
| 998_c_134 | x |
| 998_c_134 | n36 |
| 997_c_135 | x |
| 997_c_135 | n36 |
内容的提问来源于stack exchange,提问作者Mass17
相关产品推荐
相关产品推荐

