使用Pandas Multiindex查找行,其中在1级中有多个唯一的2级索引满足条件

8tntrjer  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个pandas dataframe,它有两个层次的多级索引和一个布尔列“Tag”。我想做的是确定,对于第一级中的每个索引值,在第二级中是否只有一个唯一的值,其中“Tag”== True。
在许多情况下,级别2上的索引值是重复的,但是数据是结构化的,使得“Tag”值对于具有相同索引值的每一行都是一致的。

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)

df
           Tag
ID File       
1  a     False
   a     False
   b      True
   b      True
   c     False
2  d      True
   d      True
   e     False
   e     False
   f      True

在这个例子中,我想识别文件'd'和'f'(两个不同的文件在同一个ID,其中Tag = True)
索引级别1是可以的,因为文件b是唯一具有'Tag' == True的文件,即使它出现多次。
或者,我可以确定出现问题的第1级索引(ID = 2)
我尝试使用DataFrame.duplicated为每个索引级别查找重复的“Tag”值,但它似乎完全忽略了索引。

df.duplicated(keep=False)

ID  File
1   a       True
    a       True
    b       True
    b       True
    c       True
2   d       True
    d       True
    e       True
    e       True
    f       True
dtype: bool

有没有一种方法可以让我在 Dataframe 中找到索引的唯一级别的重复值?

jchrr9hc

jchrr9hc1#

要查找索引唯一级别的数据框中的重复值,首先需要通过reset_index()对数据框进行解组:

df=df.reset_index()

dup=df[df.duplicated()]
print(dup)  # This will print all duplicate values

   ID   File    Tag
1   1   a   False
3   1   b   True
6   2   d   True
8   2   e   False

相关问题