我有一个像这样的数据框:
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')
我不是正确的命令,有人可以帮忙吗?
答案 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)