我愿意在type
列中以及每当login_method
等于resend
时过滤具有SMS和电话的ID。
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
在这种情况下,只有id 2的电话和短信的登录方式等于重新发送
答案 0 :(得分:1)
使用:
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