使用df.isin()筛选DataFrame后结果行数超出预期的问题排查
问题排查与解决方法
以下是几个可能的原因和对应的排查、解决步骤:
原DataFrame中存在重复的
record_id
你的目标列表有538个ID,但如果原DataFrame里部分ID对应多条记录,筛选后会保留所有匹配行,导致总条数超过538。可以用下面的代码找出这类重复ID:# 统计每个record_id的出现次数 id_occurrences = surv_both['record_id'].value_counts() # 筛选出在目标列表中且出现多次的ID repeat_ids = id_occurrences[id_occurrences > 1].index.intersection(consolidate_ptids) print("原DataFrame中重复的目标ID:", repeat_ids)如果输出有结果,说明这些ID在原数据里就有多行,是导致行数超标的直接原因。
检查目标列表
consolidate_ptids的重复值
虽然列表里的重复ID不会让isin筛选出更多行,但可以确认列表本身是否有冗余:from collections import Counter # 找出列表中重复的ID list_duplicates = [id for id, cnt in Counter(consolidate_ptids).items() if cnt > 1] print("目标列表中的重复ID:", list_duplicates)精准去重解决行数超标
如果确实需要每个ID只保留一行,在筛选后按record_id列去重即可:# 筛选后按record_id去重,保留第一条记录 surv_both = surv_both[surv_both['record_id'].isin(consolidate_ptids)].drop_duplicates(subset='record_id', keep='first') print(surv_both.shape)这样处理后,最终的行数应该和目标列表的唯一ID数量一致。
内容的提问来源于stack exchange,提问作者Jamie Blackband
相关产品推荐
相关产品推荐

