Использование:
df['contains_b'] = df['user'].isin(df.loc[df['app'].eq('b'), 'user'].unique()).astype(int)
print (df)
user app contains_b
0 1 a 1
1 1 b 1
2 1 c 1
3 2 a 0
4 2 c 0
5 3 b 1
6 3 c 1
Подробности :
Первый фильтр по eq
(==)
столбец app
и получить всестроки пользователя:
print (df.loc[df['app'].eq('b'), 'user'])
1 1
5 3
Name: user, dtype: int64
Для повышения производительности используйте unique
:
print (df.loc[df['app'].eq('b'), 'user'].unique())
[1 3]
Затем протестируйте столбец user
на членство по isin
:
print (df['user'].isin(df.loc[df['app'].eq('b'), 'user'].unique()))
0 True
1 True
2 True
3 False
4 False
5 True
6 True
Name: user, dtype: bool
И последнее приведение к целому числу True
s 1
s и False
s - 0
.