我有一些客户的数据框,其中包含一些项目,如下所示:
Customer ID Item
1 Banana
1 Apple
2 Orange
3 Grape
4 Banana
4 Apple
5 Orange
5 Grape
6 Orange
我愿意做的是删除所有具有相同项目的重复客户,因此结果应如下所示:
Customer ID Item
1 Banana
1 Apple
2 Orange
3 Grape
5 Orange
5 Grape
由于客户4与客户1具有相同的项目,因此客户6与2.
提前感谢您的帮助!
答案 0 :(得分:3)
不确定这是否意味着什么。但如果您指的是基于项目的重复项,您可以将每个客户的项目收集为 frozenset (如果是唯一的),或元组(如果不是唯一的),然后申请drop_duplicates
;稍后根据客户ID对原始数据框进行过滤。
df[df["Customer ID"].isin(df.groupby("Customer ID").Item.apply(frozenset).drop_duplicates().index)]
或者,如果项目不是唯一的,订单并不重要:
df[df["Customer ID"].isin(df.groupby("Customer ID")
.Item.apply(lambda x: tuple(sorted(x)))
.drop_duplicates().index)]