Nana
Nana

Reputation: 71

Match values of two columns with same IDs

I'm trying to match the data from reference and result based on the ID but been stuck for an hour now. Problem:

Sample Dataframe:

ID     Reference     Result            
1      5             5                    
2      3             NaN                      
2      3             3                             
3      NaN           NaN                         
4      2             NaN                             
4      2             NaN                            
4      2             3   
5      7             NaN
6      NaN           4          

Expected Dataframe:

ID     Reference     Result        Match    
1      5             5             True        
2      3             NaN                      
2      3             3             True                 
3      NaN           NaN           True                 
4      2             NaN                             
4      2             NaN                            
4      2             3             False 
5      7             NaN           False
6      NaN           4             False  
df['Match']=np.where(
    (df["Reference"] == df["Result"]) | 
    (
        (df["Reference"].isnull() &
     (df["Result"].isnull())
    )
), True, False)

Upvotes: 1

Views: 682

Answers (1)

user17242583
user17242583

Reputation:

Interesting challenge! Here's my take:

df['Match'] = df.Reference.eq(df.Result) | df.Reference.isna() & df.Result.isna()
df.loc[df.drop('ID', axis=1).isna().sum(axis=1).groupby(df['ID']).transform(lambda g: g if g.shape[0] > 1 else 0).astype(bool), 'Match'] = ''

Output:

>>> df
   ID  Reference  Result  Match
0   1        5.0     5.0   True
1   2        3.0     NaN       
2   2        3.0     3.0   True
3   3        NaN     NaN   True
4   4        2.0     NaN       
5   4        2.0     NaN       
6   4        2.0     3.0  False
7   5        7.0     NaN  False
8   6        NaN     4.0  False

>>> df['Match'].values
array([True, '', True, True, '', '', False, False, False], dtype=object)

Upvotes: 1

Related Questions