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

Pandas dataframe校验相同col1对应col2是否一致并定位异常行

Pandas 同col1值对应col2值一致性校验方案

以下代码基于你提供的示例数据实现两种校验需求:

1. 定位存在col2取值不一致的异常col1值

按col1分组统计每组col2的唯一值数量,筛选出数量大于1的col1即可:

import pandas as pd

# 构造示例数据,实际使用时替换为你的DataFrame
df = pd.DataFrame({
    'col1': ['X', 'Y', 'Y', 'X', 'Z', 'X'],
    'col2': ['A', 'B', 'B', 'A', 'C', 'B']
}, index=[1,2,3,4,5,6])

# 计算每个col1对应的col2唯一值数量
col1_col2_nunique = df.groupby('col1')['col2'].nunique()
# 筛选出唯一值数量>1的异常col1
bad_col1_list = col1_col2_nunique[col1_col2_nunique > 1].index.tolist()

print("异常col1取值:", bad_col1_list)
# 输出结果:异常col1取值: ['X']

2. 直接获取所有异常行的索引

如果需要拿到所有对应col1存在col2不一致的行索引,有两种实现方式:

  • 小数据量场景直接用transform生成辅助列筛选
# 生成每个col1对应的col2唯一值数量辅助列
df['col2_nunique'] = df.groupby('col1')['col2'].transform('nunique')
# 筛选异常行索引
bad_row_indexes = df[df['col2_nunique'] > 1].index.tolist()
# 删除辅助列
df.drop('col2_nunique', axis=1, inplace=True)

print("异常行索引:", bad_row_indexes)
# 输出结果:异常行索引: [1, 4, 6]
  • 大数据量场景优先用已筛选出的异常col1过滤,避免transform带来的性能损耗
# 基于第一种方法得到的bad_col1_list直接筛行
bad_row_indexes = df[df['col1'].isin(bad_col1_list)].index.tolist()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:05