根据两列的值删除数据帧pandas中的重复项

时间:2017-03-29 14:23:03

标签: python pandas dataframe duplicates

我有一些客户的数据框,其中包含一些项目,如下所示:

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.

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

不确定这是否意味着什么。但如果您指的是基于项目的重复项,您可以将每个客户的项目收集为 frozenset (如果是唯一的),或元组(如果不是唯一的),然后申请drop_duplicates;稍后根据客户ID对原始数据框进行过滤。

df[df["Customer ID"].isin(df.groupby("Customer ID").Item.apply(frozenset).drop_duplicates().index)]

enter image description here

或者,如果项目不是唯一的,订单并不重要:

df[df["Customer ID"].isin(df.groupby("Customer ID")
                            .Item.apply(lambda x: tuple(sorted(x)))
                            .drop_duplicates().index)]