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

使用Pandas筛选ID重复且stat值不同的记录

解决方法:筛选ID相同但stat值存在差异的记录

你的问题核心是要找出同一ID下stat值不唯一的所有记录,当前用df['ID'].duplicated()的问题在于:它只标记重复出现的ID行(排除首次出现的行),而且完全没考虑stat的差异,会误把ID重复但stat全相同的行也包含进来,同时漏掉目标ID的部分行。

正确的思路分两步:

  • 第一步:找出所有“同一ID下stat值有多种取值”的ID
  • 第二步:用这些ID过滤原DataFrame,保留对应所有行

具体代码实现

import pandas as pd

# 构造测试数据
data = {
    'ID': ['aaBBB1234:3716', 'aaBBB1234:3716', 'aaBBB1234:3716', 'bbSSS2333:5000', 'bbSSS2333:5000'],
    'name': ['apv', 'mps', 'ty', 'teas', 'llv'],
    'tag': ['eertyyuiiio', 'rtuui', 'fgggll1', 'dexcv', 'ieeve'],
    'stat': [False, False, True, False, False]
}
df = pd.DataFrame(data)

# 第一步:找出stat值不唯一的ID
ids_with_varying_stat = df.groupby('ID')['stat'].nunique()[lambda x: x > 1].index

# 第二步:筛选这些ID的所有记录
filtered_df = df[df['ID'].isin(ids_with_varying_stat)]

print(filtered_df)

代码解释

  • df.groupby('ID')['stat'].nunique():按ID分组,计算每个ID下stat值的不同数量
  • lambda x: x > 1:筛选出stat值数量大于1的ID(也就是同一ID下stat有差异)
  • df['ID'].isin(ids_with_varying_stat):保留原DataFrame中ID属于上述列表的所有行

执行后得到的结果就是你期望的:仅保留ID为aaBBB1234:3716的所有记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:52:14