如何在Pandas中筛选所有Run中均存在错误的ID?
修正方案
你的原代码逻辑错误:按Run分组计算Error的唯一值数量,是在筛选每个Run中包含所有Error类型的行,和你要找“所有Run中始终存在错误的ID”的需求不匹配,所以返回了全部数据。
以下是正确的实现方式:
方法一(适用于同一ID-Run下Error值一致的场景)
直接按ID分组,验证该ID在所有行中的Error是否全为True:
# 筛选出所有Run中Error始终为True的ID valid_ids = all_data_df.groupby('ID')['Error'].all() valid_ids = valid_ids[valid_ids].index # 提取这些ID的所有行 df = all_data_df[all_data_df['ID'].isin(valid_ids)]
方法二(更严谨,支持同一ID-Run下Error值混合的场景)
如果同一个ID在同一个Run下既有错误又有正常记录,需要先确保每个Run里该ID至少有一条错误记录,再验证该ID在所有Run中都满足这个条件:
# 先按ID+Run分组,判断每个分组是否存在错误记录 id_run_error = all_data_df.groupby(['ID', 'Run'])['Error'].any() # 再按ID分组,验证该ID在所有Run中都有错误记录 valid_ids = id_run_error.groupby('ID').all() valid_ids = valid_ids[valid_ids].index # 提取符合条件的行 df = all_data_df[all_data_df['ID'].isin(valid_ids)]
以上两种方法都能得到你预期的仅保留ID为234534的结果。
内容的提问来源于stack exchange,提问作者user_04248753498
相关产品推荐
相关产品推荐

