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

如何用Pandas找出id对应多个doc_no的无效记录

识别DataFrame中id对应多个doc_no的无效记录

要找出所有id对应多个不同doc_no的无效记录,可按以下步骤实现:

  1. 定位无效id:统计每个id关联的唯一doc_no数量,筛选出数量大于1的id(这类id违反了“一个id对应唯一doc_no”的规则)
  2. 提取无效记录:用筛选出的无效id,从原DataFrame中取出所有对应记录
  3. 输出通知:将无效id和对应的记录展示给用户,提示修正

完整实现代码

import pandas as pd

def find_non_unique_values():
    df = pd.DataFrame({
        'id': ['id-1', 'id-1', 'id-2', 'id-3'], 
        'doc_no': ['doc-1', 'doc-2', 'doc-3', 'doc-4']
    })
    
    pd.set_option('display.max_columns', None)
    pd.set_option("display.width", 150)
    
    # 找出所有对应多个doc_no的无效id
    id_doc_count = df.groupby('id')['doc_no'].nunique()
    invalid_ids = id_doc_count[id_doc_count > 1].index.tolist()
    
    if not invalid_ids:
        print("所有id对应的doc_no均唯一,无无效记录")
        return
    
    # 提取所有无效记录
    invalid_records = df[df['id'].isin(invalid_ids)]
    
    # 输出通知和无效记录详情
    print("发现以下id对应多个不同的doc_no,请修正:")
    print(", ".join(invalid_ids))
    print("\n无效记录详情:")
    print(invalid_records)

find_non_unique_values()

代码说明

  • df.groupby('id')['doc_no'].nunique():按id分组,统计每个组内唯一的doc_no数量
  • id_doc_count[id_doc_count > 1].index.tolist():筛选出唯一doc_no数量大于1的id,得到无效id列表
  • df[df['id'].isin(invalid_ids)]:从原DataFrame中筛选出所有无效id对应的记录
  • 若没有无效id,会直接提示无问题;存在无效id则输出需要修正的id和对应记录

运行代码后,会输出:

发现以下id对应多个不同的doc_no,请修正:
id-1

无效记录详情:
     id doc_no
0  id-1  doc-1
1  id-1  doc-2

内容的提问来源于stack exchange,提问作者AllSolutions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 08:40:05