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

使用Pandas多级索引查找一级索引下满足条件的二级索引不唯一的行

解决方案

核心思路

由于同一(ID, File)组合对应的Tag值完全一致,我们可以先对(ID, File)去重,再按一级索引ID分组,统计每个分组内Tag=True的唯一File数量,最终筛选出存在多个Tag=True的File的分组及对应记录。

步骤1:去重处理

首先去除(ID, File)的重复行,保留每个组合的唯一Tag值:

import pandas as pd

d = {'ID': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], 
     'File': ['a', 'a', 'b', 'b', 'c', 'd', 'd', 'e', 'e', 'f'], 
     'Tag': [False, False, True, True, False, True, True, False, False, True]}
df = pd.DataFrame(data=d)
df.set_index(['ID', 'File'], inplace=True)

# 去重:保留每个(ID, File)的唯一记录
unique_df = df.reset_index().drop_duplicates(subset=['ID', 'File']).set_index(['ID', 'File'])

步骤2:标记存在多个True File的ID

按ID分组,统计每个分组内Tag=True的File数量,为符合条件的记录打上标记:

# 对每个ID,判断是否存在多个Tag=True的File
unique_df['multiple_true'] = unique_df.groupby('ID')['Tag'].transform(lambda x: x.sum() > 1)

步骤3:筛选目标记录

提取Tag=True且所属ID存在多个True File的记录:

result = unique_df[(unique_df['Tag']) & (unique_df['multiple_true'])]
print(result)

运行结果:

Tag  multiple_true
ID File                      
2  d      True           True
   f      True           True

关于duplicated方法的问题

你之前使用df.duplicated(keep=False)返回全True,是因为该方法默认检查整行数据的重复——原数据中同一(ID, File)的行完全重复,因此全部被标记为重复值,这和你需要的「按ID分组检查不同File的Tag情况」逻辑不符,所以无法得到预期结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 00:37:27