保留满足两个条件的组

时间:2020-11-04 17:38:53

标签: python pandas

我有一个数据框,其中一列包含代码,另一列具有以下状态:

db = {'Code': ['BBBBBR7','BBBBBR7','BCCMR', 'BBLGLC7', 'BBLGLC7', 'BCCBD', 'BCCBD', 'BCHRC'],
        'Status': ['OK','KO','OK', 'OK', 'YES', 'PASS', 'PASS', 'OK']
       }

df = pd.DataFrame(db)

enter image description here

我只想保留第一列中有重复项且状态为OK的值,但同时输出重复的代码,OK状态和其他关联状态。

预期输出:

enter image description here

3 个答案:

答案 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