我有一个熊猫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)} 虽然,我无法找到任何逻辑来查找重复项。 还有其他方法可以找到那些重复的项目
答案 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')}
。