2016-07-06 16 views
4

我想要顯示列 - 「網站」中的任何值出現多次的所有行。例如 - 如果某個網站「xyz.com」發生多次,那麼我想顯示所有這些行。我正在使用下面的代碼 -顯示特定列中的任何值出現多次的行

df[df.website.isin(df.groupby('website').website.count() > 1)] 

上面的代碼返回零行。但是,我可以清楚地看到有這麼多的網站通過運行下面的代碼出現不止一次 -

df.website.value_counts() 

我應該如何修改我的代碼第1行顯示所有這樣的行?

回答

6

使用duplicatedsubset='website'keep=False

df[df.duplicated(subset='website', keep=False)] 

樣品輸入:

col1 website 
0 A abc.com 
1 B abc.com 
2 C abc.com 
3 D abc.net 
4 E xyz.com 
5 F foo.bar 
6 G xyz.com 
7 H foo.baz 

樣本輸出:

col1 website 
0 A abc.com 
1 B abc.com 
2 C abc.com 
4 E xyz.com 
6 G xyz.com 
+0

這工作!謝謝。還有一個困惑。使用上面的代碼行後,我得到200行(這意味着200行有重複的網站)。當我使用df.drop_duplicates(subset ='website')時,它會刪除2500行。爲什麼會發生?它不應該只是下降200行? – ComplexData

+0

如果你想刪除所有重複項,你可以使用'df.drop_duplicates(subset ='website',keep = False)'。默認情況下,'drop_duplicates'保留重複的第一個實例,然後刪除其餘部分,除非用'keep'指定。這並不能解釋你所看到的行爲,並且測試'drop_duplicates'對我來說可以正常工作。 – root

+0

您可能想深入一點,看看哪些行不在「重複」輸出中。調查可能有助於解釋這種差異。 – root

相關問題