2013-03-06 75 views
20

我有一個pandas.DataFrame與一列名爲name包含字符串。 我想獲得列中出現多次的名稱列表。我怎麼做?如何使用熊貓查找重複名稱?

我想:

funcs_groups = funcs.groupby(funcs.name) 
funcs_groups[(funcs_groups.count().name>1)] 

但它不篩選出的單名。

回答

37

如果你想找到名稱重複的行(除了第一次,我們看到),你可以試試這個

In [16]: import pandas as pd 
In [17]: p1 = {'name': 'willy', 'age': 10} 
In [18]: p2 = {'name': 'willy', 'age': 11} 
In [19]: p3 = {'name': 'zoe', 'age': 10} 
In [20]: df = pd.DataFrame([p1, p2, p3]) 

In [21]: df 
Out[21]: 
    age name 
0 10 willy 
1 11 willy 
2 10 zoe 

In [22]: df.duplicated('name') 
Out[22]: 
0 False 
1  True 
2 False 
+3

我比我更喜歡這個。 – DSM 2013-03-06 14:55:58

+1

謝謝,我也從你那裏學到了一些東西。 – waitingkuo 2013-03-06 16:16:01

1

我有一個類似的問題,碰到這個答案出來。

我想這也適用:

counts = df.groupby('name').size() 
df2 = pd.DataFrame(counts, columns = ['size']) 
df2 = df2[df2.size>1] 

df2.index會給你重複

+2

更好使用df2 ['size']而不是df2.size,因爲df2.size是一個內置函數。 – Lydia 2015-07-31 18:36:10

9

名列表的一個內膽可以是:

x.set_index('name').index.get_duplicates() 

索引中包含的方法爲找到重複,列似乎沒有類似的方法..

+1

這正是我所需要的。謝謝@idoda! – propjk007 2015-12-14 22:33:12

+0

這個「set_index()」是否銷燬了原始數據幀的索引x?我應該在數據框的副本上運行此命令嗎? – 2017-08-18 10:37:04

1

另外一個內膽可以是:

(df.name).drop_duplicates() 
3

value_counts會給你重複的次數爲好。

names = df.name.value_counts() 
names[names > 1]