我想检查按列app
分组的列user
是否包含特定元素,例如b
。
import pandas as pd
df=pd.DataFrame({'user':[1,1,1,2,2,3,3],'app':['a','b','c','a','c','b','c']})
Input:
app user
0 a 1
1 b 1
2 c 1
3 a 2
4 c 2
5 b 3
6 c 3
Expected:
app user contains_b
0 a 1 1
1 b 1 1
2 c 1 1
3 a 2 0
4 c 2 0
5 b 3 1
6 c 3 1
最佳答案
使用:
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
的是1
s和False
s-0
。关于python - 分组后如何检查一列是否包含特定元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52481028/