首页 > 解决方案 > 是否可以在 Pandas 中结合 Isin caluse 和 or 运算符?

问题描述

我有两个看起来像这样的 DF

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'])

我定义了一个简单的函数并将其应用于 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)

表 yy 现在看起来像这样

在此处输入图像描述

我根据下面的简单逻辑创建了一个 new_df

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

在此处输入图像描述

我想知道是否可以重写逻辑以包含一个“OR”运算符,该运算符还检查“额外”列并包含任何具有“OK”值的行,类似于下面的代码(我知道这是不正确的)

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

所以 New_df 看起来像这样

aa  bb  cc dd  extra
4   5   5   2    OK
7   2   9   5    OK

标签: pythonpandas

解决方案


推荐阅读