簡體   English   中英

如何根據其他列中的值從Pandas數據框中查找重復項?

[英]How to find duplicates from a Pandas dataframe based upon the values in other columns?

我有一個熊貓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)}盡管,我無法找到任何邏輯來查找重復項。 有什么其他方法可以找到那些重復的項目

您可以簡單地使用.duplicated 確保將['period', 'store']作為subset傳遞並keepFalse以便將所有行都返回。

 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

請注意,根據您指定的邏輯,所有行都是重復的。

編輯 OP詳細闡述了預期的格式后,我建議

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')}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM