Поиск строк, в которых два столбца вместе не равны заранее заданным значениям - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть фрейм данных, в котором я пытаюсь найти строки, в которых два столбца вместе не совпадают.

Например, column:landing_page может равняться new_page или old_page, а column: group может равняться control или treatment. В настоящее время я использую

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

Я пытаюсь найти строки, в которых new_page и treatment не совпадают.

но выкидывает и ошибка. Как правильно это сделать?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

С 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]
0 голосов
/ 01 сентября 2018

Может быть, это

df.loc[((df['group']==df['treatment'])|(df['landing_page']==df['old_page']))&((df['group']==df['control'])|(df['landing_page']==df['new_page']))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...