我有一个用户表,其中包含他们的项目和其他信息
我需要选择只有一个项目类型的唯一用户,否则从数据框中删除。 表格示例:
|customer |items |levels |
| -------| ------- | ------- |
| a | x | 0 |
| a | x | 1 |
| a | y | 0 |
| a | y | 0 |
| b | t | 0 |
| b | t | 1 |
| b | t | 1 |
| b | t | 3 |
因此删除客户“ a”
我可以这样检查:
df.groupby('customer').agg({'items':'nunique'})
并加入了两个表,但是我不确定效率如何。
我们是否有更有效的方法来删除该值(我们也有多个记录,所以我不确定如何使用drop_duplicate
)
答案 0 :(得分:2)
您可以进行transform
con=df.groupby('customer')['item'].transform('nunique')==1
df1=df[con].copy()
要修复您的输出
s=df.groupby('customer').agg({'items':'nunique'})
df1=df.loc[df.customer.isin(s[s==1].index)].copy()
答案 1 :(得分:1)
我们也可以使用GroupBy.filter
:
new_df=df.groupby('customer').filter(lambda x: x['items'].nunique()==1)
print(new_df)
customer items levels
4 b t 0
5 b t 1
6 b t 1
7 b t 3