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

如何在Pandas DataFrame中按unique_id校验列值一致性并提取异常索引

解决方案:按组校验列值一致性并提取不一致行索引

没问题,我来帮你实现这个需求。咱们可以借助Pandas的分组(groupby)功能结合简单的逻辑判断,轻松定位到组内列值不一致的行索引。

步骤1:构建示例DataFrame

首先先把你提供的数据转换成Pandas DataFrame:

import numpy as np
import pandas as pd

# 构建你给出的示例数据
data = {
    'unique_id': [30, 30, 30, 40, 40, 40],
    'length': [12, 12, 12, 600, 800, 600],
    'frame': [800, 800, 700, 1200, 1200, 800]
}
df = pd.DataFrame(data)

步骤2:实现校验逻辑

核心思路是:对每个unique_id分组,检查组内length和frame列的值是否全部一致,如果存在不同值,就把对应的行索引提取出来。

这里用transform方法非常方便,它能把分组后的判断结果映射回原DataFrame的每一行,这样我们可以直接筛选出目标行:

# 初始化存储结果的列表
length_mismatch = []
frame_mismatch = []

# 处理length列:找出组内值不一致的行索引
length_not_unique = df.groupby('unique_id')['length'].transform(lambda x: x.nunique() > 1)
length_mismatch = df[length_not_unique].index.tolist()

# 处理frame列:找出组内值不一致的行索引
frame_not_unique = df.groupby('unique_id')['frame'].transform(lambda x: x.nunique() > 1)
frame_mismatch = df[frame_not_unique].index.tolist()

# 输出预期结果
print(f"length={length_mismatch}")  # 输出: length=[4]
print(f"frame={frame_mismatch}")    # 输出: frame=[2,5]

逻辑解释

  • groupby('unique_id')['length']:按unique_id分组,聚焦到length列
  • transform(lambda x: x.nunique() > 1):对每个分组,判断该组内length值的唯一数量是否大于1(即存在不同值),返回和原DataFrame长度一致的布尔序列
  • df[length_not_unique].index.tolist():筛选出布尔序列为True的行,提取它们的索引并转成列表

运行这段代码后,就能得到你需要的length=[4]和frame=[2,5]的结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:31:05