фильтровать по двум условиям после группы по - PullRequest
0 голосов
/ 05 июля 2018

Я хочу отфильтровать идентификаторы с SMS и телефоном в столбце type, и каждый раз, когда login_method равен resend

df

id    type   login_method
 1     SMS         resend
 1     SMS       complete
 2   phone         resend
 2     SMS         resend
 2     SMS          start
 3   phone         resend
 3   phone          start
 3   phone       complete
 3     SMS           nice

ожидаемый результат

df
    id    type   login_method
 1     SMS         resend
 1     SMS       complete
 3   phone         resend
 3   phone          start
 3   phone       complete
 3     SMS           nice

В этом случае только у идентификатора 2 телефон и SMS в методе входа равны повторной отправке

1 Ответ

0 голосов
/ 05 июля 2018

Использование:

v = ['SMS','phone']
#first filter only valuse by list
df = df[df['type'].isin(v)]

#get id where are all values per groups with resend
m1 = df['login_method'] == 'resend'
s = df[m1].drop_duplicates(['id','type']).groupby('id')['type'].nunique() != len(v)

#filtering by ids
df1 = df[df['id'].isin(s.index[s])]
print (df1)
   id   type login_method
0   1    SMS       resend
1   1    SMS     complete
4   3  phone       resend
5   3  phone        start
6   3  phone     complete
7   3    SMS         nice
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...