是否包含特定元素

是否包含特定元素

我想检查按列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/

10-12 20:26