首页 > 解决方案 > 查找两列一起不等于预定值的行

问题描述

我有一个数据框,我正在尝试查找其中两列不匹配的行。

例如,column:landing_page可以等于new_pageold_page,并且column: group可以等于controltreatment。目前我使用

no_line_up = df.query('group = treatment and landing_page = old_page or group = control and landing_page = new_page')

我正在尝试查找不匹配的new_page行。treatment

但它会抛出错误。这样做的正确方法是什么?

标签: pythonpandasdataframeindexing

解决方案


pd.DataFrame.query您仍然需要使用相同的基本运算符,例如用于测试==相等性并使用括号分隔条件:

df = pd.DataFrame({'group': ['treatment', 'control', 'hello'],
                   'landing_page': ['old_page', 'new_page', 'test']})

res = df.query('(group == "treatment" and landing_page == "old_page") \
                 or (group == "control" and landing_page == "new_page")')

print(res)

       group landing_page
0  treatment     old_page
1    control     new_page

更具可读性的是结合布尔掩码并使用pd.DataFrame.loc

m1 = (df['group'] == 'treatment') & (df['landing_page'] == 'old_page')
m2 = (df['group'] == 'control') & (df['landing_page'] == 'new_page')

res = df.loc[m1 & m2]

推荐阅读