2017-09-02 34 views
1

數據幀示例:https://www.screencast.com/t/6bxST8Fn如何使用for循環來獲取熊貓數據框中所有列的總重複數?

我試圖找到在熊貓數據框的每列中存在多少重複記錄。我以爲我可以簡單地在下面的for循環中使用df.[column name].duplicated().sum()代碼,但是對於duplicateated()卻得到了無效的語法錯誤。

for column in df.columns: 
    df[column].duplicated().sum() 

我的具體目標:可能有人請告訴我什麼是正確的語法?但是,如果我的做法完全不正確,那麼for循環可以完成同樣的任務嗎?

我希望能得到以下格式輸出: 列的名稱:重複總數列

+0

你是什麼意思通過「在每列中重複記錄?」看來你只是要求給定列中的每個值出現在該列中的次數。 – blacksite

+0

列A列B列C 馬自達索尼戴爾 馬自達蘋果HP 豐田索尼東芝 列A有2個副本,B柱有2次重複,塔C 0 – techscolasticus

+0

請添加*和*格式你的數據是什麼像在問題中,而不是在評論中。 – blacksite

回答

0

下面是做這件事:

import pandas as pd 

df = pd.DataFrame({'Car': ['M', 'M', 'T', 'T', 'C']}) 

dupes = {} 

for c in df: 
    gb = df.groupby(c).size() 
    dupes[c] = gb[gb > 1].sum() 

dupes現在:

>>> dupes 
{'Car': 4} 

只需將該邏輯應用於您的完整數據框即可。

+0

太棒了!謝謝你的幫助。 我試着從Excel複製/粘貼我的數據,它看起來完全像我的評論。 – techscolasticus

+0

之後,只需突出顯示文本並點擊「Ctrl」+「K」即可將其格式化爲代碼。有關更多詳細信息,請參見[此處](https://meta.stackexchange.com/questions/2115/text-formatting-now-allowed-in-comments-list-of-proven-and-disproven-ability)。歡迎來到這個網站。 – blacksite

0

可以GROUPBY上所有列,並調用大小的指標指示重複值:

df.groupby(df.columns.tolist(),as_index=False).size() 

one three two 
False False True  1 
True False False 2 
     True True  1 
dtype: int64 
1

另一個簡單的解決方案將基於值計數來擺脫for循環。即

df = pd.DataFrame({'Car': ['M', 'M', 'T', 'T', 'T', 'C'],'TV':['So','Su','So', 'So','T','So'],'Computer': ['D','Hp','Ap','Ac','S','H']}) 


x = df.apply(pd.Series.value_counts) 
dupes_count = x[x>1].fillna(0).sum().to_dict() 

輸出:

{'Car': 5, 'Computer': 0, 'TV': 4} 
1

您可以使用value_counts先用apply所有列,然後更換獨特(1)值0sum

df = pd.DataFrame({'Car': list('MMTTCT'), 
        'Computer':list('abbbbc'), 
        'TV':list('aaabbb')}) 

print (df.apply(pd.value_counts)) 
    Car Computer TV 
C 1.0  NaN NaN 
M 2.0  NaN NaN 
T 3.0  NaN NaN 
a NaN  1.0 3.0 
b NaN  4.0 3.0 
c NaN  1.0 NaN 

dupes = df.apply(pd.value_counts).replace(1,0).sum().astype(int).to_dict() 
print (dupes) 
{'Car': 5, 'TV': 6, 'Computer': 4} 
+0

幾乎類似的刪除冗餘功能。 – Dark

相關問題