如何根据其他列中的值从Pandas数据框中查找重复项?

时间:2019-08-20 14:40:36

标签: python pandas python-2.7 dataframe

我有一个熊猫Df-

A= 
[period store  item
1        32     'A'
1        34     'A'
1        32     'B'
1        34     'B'
2        42     'X'
2        44     'X'
2        42     'Y'
2        44     'Y']

我需要实现以下内容: 如果该商品在该特定时期内具有与其他任何商品相同的商店,则这些商品将重复。 因此,在这种情况下,A和B是重复项,因为它们在各自的期间内具有相同的存储。

我尝试使用以下方法将其转换为嵌套字典:

dicta = {p: g.groupby('items')['store'].apply(tuple).to_dict()
         for p, g in mkt.groupby('period')}

哪个正在给我这样的字典:

dicta = {1: {'A': (32, 34),'B': (32, 34)}, 2: {'X': (42, 44),'Y': (42, 44)}}

... 所以最后我想要一个这样的字典。

{1:(A,B),2:(X,Y)} 虽然,我无法找到任何逻辑来查找重复项。 还有其他方法可以找到那些重复的项目

1 个答案:

答案 0 :(得分:2)

您可以简单地使用.duplicated。确保将['period', 'store']传递为subset,将keep传递为False,以便将所有行都返回。

 print(A[A.duplicated(subset=['period', 'store'], keep=False)])

输出

  period store item
0      1    32    A
1      1    34    A
2      1    32    B
3      1    34    B
4      2    42    X
5      2    44    X
6      2    42    Y
7      2    44    Y

请注意,根据您指定的逻辑,所有行都是重复的。

编辑在详细说明了期望的格式后,我建议

duplicates = A[A.duplicated(subset=['period', 'store'], keep=False)]
output = {g: tuple(df['item'].unique()) for g, df in duplicates.groupby('period')}

然后output{1: ('A', 'B'), 2: ('X', 'Y')}