Как проверить, что уникальные значения столбца существуют в другом столбце в кадре данных? - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть такой фрейм данных:


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  ]


Я хочу проверить, существует ли уникальное значение col1 в Col2 для того же идентификатора . Идентификатор не всегда один и тот же номер. проверка должна выполняться только среди строк с одинаковым идентификатором. Я хочу получить такой результат, как:


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 ]

3 голосов
/ 02 апреля 2020

Вы просто хотите проверить, существует ли значение ячейки в контейнере: isin - это путь к go. Но так как вы хотите обработать идентификатор по идентификатору, вам также понадобится 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')
0 голосов
/ 02 апреля 2020

Вы можете подать заявку и проверить, находится ли значение в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...