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

Pandas筛选df_Movements中匹配df_Participants参与者ID的行结果不符

pandas两个DataFrame按ID匹配过滤异常排查方案

核心问题原因

匹配失败90%以上是两表关联ID的数据类型不一致导致的:

  • df_Participants的id列是浮点型(样例中显示为1053.0)
  • df_Movements的participant列是整型(样例中显示为1053)
    pandas的isin判断会同时校验值和数据类型,类型不同就算数值相等也会判定为不匹配。

排查步骤

  • 第一步:验证数据类型
    运行以下代码确认两列类型:
    print("df_Participants的id列类型:", df_Participants['id'].dtype)
    print("df_Movements的participant列类型:", df_Movements['participant'].dtype)
    
  • 第二步:统一ID列数据类型
    优先选择转整型的方案(如果确认ID没有非整数值):
    remove_incomplete_submissions = True
    if remove_incomplete_submissions:
        # 先清理参与者表的ID:去掉空值、转成整型、去重
        valid_participant_ids = df_Participants['id'].dropna().astype(int).unique()
        # 再过滤移动表
        df_Movements = df_Movements.loc[df_Movements['participant'].isin(valid_participant_ids)]
    
    如果ID存在字符串、特殊字符的情况,统一转字符串处理更稳妥:
    remove_incomplete_submissions = True
    if remove_incomplete_submissions:
        # 统一转字符串,去掉浮点型ID末尾的.0
        valid_ids = df_Participants['id'].astype(str).str.rstrip('.0').unique()
        movement_ids = df_Movements['participant'].astype(str)
        df_Movements = df_Movements.loc[movement_ids.isin(valid_ids)]
    
  • 第三步:校验结果
    运行代码确认过滤结果符合预期:
    # 查看过滤后的唯一参与者ID
    print(df_Movements['participant'].unique())
    # 统计唯一数量,和参与者表的有效ID数量对比
    print("过滤后唯一参与者数量:", df_Movements['participant'].nunique())
    print("参与者表有效ID数量:", df_Participants['id'].dropna().nunique())
    

其他可能的排查点

  1. 若ID为字符串类型,先检查是否存在前后空格、不可见字符,可通过str.strip()清理后再匹配
  2. 两列中的NaN值isin判断永远返回False,匹配前需先过滤掉空值
  3. 若ID包含字母,需统一大小写后再匹配

内容的提问来源于stack exchange,提问作者London-35

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:02