0

I have two DF that looks like this

xx = pd.DataFrame(np.array([[1, 2, 3], [4, 2,1], [7, 2, 9]]),
                   columns=['a', 'b', 'c'])

yy = pd.DataFrame(np.array([[1, 8, 3,6], [4, 5, 5,2], [7, 2, 9,5]]),
                   columns=['aa', 'bb', 'cc','dd'])

I have defined a simple function and applied it to df yy

def match_logic(row):
    if row['aa'] == 5:
        return 'OK'
    if row['bb'] == 5:
        return 'OK'
    if row['cc'] == 5:
        return 'OK'
    if row['dd'] ==5:
        return 'OK'
    else:
        return 'NO'
    

yy['extra'] = yy.apply(lambda row: match_logic(row), axis=1)

table yy now looks like this

enter image description here

I have created a new_df based on a simple logic below

new2 = (yy.aa.isin(xx.a) & yy.bb.isin(xx.b)) 
new_df = yy[new2]

enter image description here

I am wondering if its possible to re-write the logic to include an 'OR' operator that also checks the 'extra' column and includes any row that has the value 'OK' something like the below code (which I know is incorrect)

 new2 = (yy.aa.isin(xx.a) & yy.bb.isin(xx.b) or yy.extra == 'OK') 

So that New_df looks like this

aa  bb  cc dd  extra
4   5   5   2    OK
7   2   9   5    OK
AKX
  • 152,115
  • 15
  • 115
  • 172

0 Answers0