如何用Pandas找出id对应多个doc_no的无效记录
识别DataFrame中id对应多个doc_no的无效记录
要找出所有id对应多个不同doc_no的无效记录,可按以下步骤实现:
- 定位无效id:统计每个
id关联的唯一doc_no数量,筛选出数量大于1的id(这类id违反了“一个id对应唯一doc_no”的规则) - 提取无效记录:用筛选出的无效id,从原DataFrame中取出所有对应记录
- 输出通知:将无效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
相关产品推荐
相关产品推荐

