You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:03:20