如何检查数据框的另一列中是否存在一列的唯一值?

时间:2020-04-02 14:20:05

标签: python pandas dataframe

我有一个像这样的数据框:


A= [ ID COL1 COL2  
     23  AA   BB    
     23  AA   AA   
     23  AA   DD   
     23  BB   BB 
     23  BB   AA
     23  BB   DD
     23  CC   BB
     23  CC   AA
     24  AA   BB  ]


我要检查的是col2的唯一值是否存在于col2中相同的ID ,ID不一定总是相同的数字。该检查只能在具有相同ID的行之间进行 我想要这样的结果:


A= [ ID COL1 COL2  check 
     23  AA   BB    OK 
     23  AA   AA    OK 
     23  AA   DD    OK
     23  BB   BB    OK 
     23  BB   AA    OK 
     23  BB   DD    OK 
     23  CC   BB    KO
     23  CC   AA    KO 
     24  AA   BB    KO 
]

我尝试过

 A['check'] = np.where(A.Col1.eq(A['Col2']).groupby(A['ID']).transform('any'), 'Anomalie', 'Valeur OK')

我不是正确的命令,有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

您只想检查容器中是否存在单元格值:isin是解决方法。但是,当您要按ID处理ID时,还需要一个groupby:

df['check'] = df.groupby(['ID', 'COL1'], group_keys=False
                         ).apply(lambda x: x['COL1'].isin(x['COL2']))

它给出了预期的结果:

   ID COL1 COL2  check
0  23   AA   BB   True
1  23   AA   AA   True
2  23   AA   DD   True
3  23   BB   BB   True
4  23   BB   AA   True
5  23   BB   DD   True
6  23   CC   BB  False
7  23   CC   AA  False
8  24   AA   BB  False

如果要使用OK / KO字符串而不是布尔值,只需添加:

df['check'] = np.where(df['check'], 'OK', 'KO')

答案 1 :(得分:0)

您可以申请并检查其值是否在Col2中:

A['check'] = A[['ID', 'Col1'].apply(lambda row: 'OK' if row['Col1'] in A.loc[A['ID']==row['ID'], 'Col2'] else 'KO', axis=1)