我有一个数据框,其中一列包含代码,另一列具有以下状态:
db = {'Code': ['BBBBBR7','BBBBBR7','BCCMR', 'BBLGLC7', 'BBLGLC7', 'BCCBD', 'BCCBD', 'BCHRC'],
'Status': ['OK','KO','OK', 'OK', 'YES', 'PASS', 'PASS', 'OK']
}
df = pd.DataFrame(db)
我只想保留第一列中有重复项且状态为OK的值,但同时输出重复的代码,OK状态和其他关联状态。
预期输出:
答案 0 :(得分:2)
定义两个掩码,一个检查一组是否包含至少一个OK
,另一个检查是否存在重复。然后将它们与按位的&
链接起来并为数据帧编制索引:
m1 = df.Status.eq('OK').groupby(df.Code).transform('any')
m2 = df.Code.duplicated(keep=False)
print(df[m1&m2])
Code Status
0 BBBBBR7 OK
1 BBBBBR7 KO
3 BBLGLC7 OK
4 BBLGLC7 YES
答案 1 :(得分:1)
data = data.drop_duplicates(keep='first')
data = data[data.groupby(['Code'])['Code'].transform('count') > 1]
答案 2 :(得分:0)
我知道这并非您要找的答案,但我想分享它,以便它可能有用。我也在学习。
newdf = df[df.duplicated('Code',keep=False)]
newdf =newdf[newdf["Status"]!="PASS"]
newdf = newdf.reset_index()
newdf = newdf.drop('index',1)
newdf