我想检查非重复项并返回所有这些非重复项,但仅当这些键显示多次时才返回。例如,
Var Code Description
1 A ABC
2 B EF
1 A ABCD
2 B EF
1 B ABC
3 C DD
我希望得到这样的结果
Var Code Description
1 A ABC
1 A ABCD
我想要此表的原因是检测哪个(变量,代码)对具有多个描述,因为在我的情况下,如果它具有多个描述,则意味着这些对的描述应修改为唯一。
此表返回具有相同变量名称和相同代码名称但描述不同的行。因为对于我的数据,变量的代码应仅具有一个描述,而不是多个描述。
不返回3 C DD的原因是因为只有一个有关(3,C)对的记录,而DD是对此对的唯一描述。
未返回2 B EF是因为尽管两行包含(2,B)对,但它们具有相同的描述,这是正常的。
不返回1 B ABC是因为虽然var 1显示3次,但(1,B)对仅显示1次并且仅具有一个描述ABC。
有解决方案吗?
谢谢!
答案 0 :(得分:2)
您可以使用groupby并使用nunique过滤行
new_df = df.groupby(['Var', 'Code']).filter(lambda x: x['Description'].nunique() > 1)
Var Code Description
0 1 A ABC
2 1 A ABCD
答案 1 :(得分:0)
msk1 = df.duplicated(subset=['Code', 'Var'], keep=False)
msk2 = df.duplicated(subset=['Code', 'Var', 'Description'], keep=False)
msk3 = msk1 & ~msk2
df[msk3]
# msk1 filters to all rows where both Var and Code are duplicated
print(df[msk1])
Var Code Description
1 A ABC
1 A ABCD
2 B EF
2 B EF
# msk2 further filters to where Var Code and Description are duplicated
print(df[msk2])
Var Code Description
2 B EF
2 B EF
# so then finally msk3 is msk1 without msk2
# give me all rows where Var and Code are duplicated
# except for the ones where the Description is also duplicated
# - the desired result
print(df[msk3])
Var Code Description
1 A ABC
1 A ABCD