我有一个数据框,我正在尝试查找其中两列不匹配的行。
例如,column:landing_page
可以等于 new_page
或 old_page
,column:group
可以等于 >控制
或治疗
。目前我使用
no_line_up = df.query('group =治疗和landing_page = old_page或group =控制和landing_page = new_page')
我正在尝试查找 new_page
和 treatment
不匹配的行。
但它会抛出错误。这样做的正确方法是什么?
最佳答案
与 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
更具可读性的是组合 bool 掩码并使用 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]
关于python - 查找两列合计不等于预定值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52123199/