2016-07-10 33 views
4

这是我的数据框大熊猫筛选如果名字出现在列超过N次

df = pd.DataFrame({'Col1':['Joe','Bob','Joe','Joe'], 
        'Col2':[55,25,88,80]}) 

我只是想,如果它出现在不止一次的名字“Col1中”

我可以像这

grouped = df.groupby("Col1") 
grouped.filter(lambda x: x["Col1"].count()>2)['Col1'].unique() 

当然,这是难看的代码

有没有更简单更清洁的方式?

回答

3

使用value_countsisin

vc = df.Col1.value_counts() > 2 
vc = vc[vc] 

df.loc[df.Col1.isin(vc.index)] 

enter image description here

+0

谢谢,但看起来会工作,如果我想n超过2我应该做得更清楚我编辑我的问题 – user2333196

+0

如果你这样做:print df.loc [df.Col1.isin(vc.index)],它会节省您PNG的麻烦 – Merlin

+0

@Merlin我不介意PNG。尽管怎么想?文字还是图片? – piRSquared

3

下面是使用np.unique基于NumPy的解决方案 -

unq,count = np.unique(df.Col1,return_counts=True) 
out = unq[count>n] 

采样运行 -

In [34]: df 
Out[34]: 
    Col1 Col2 
0 Joe 55 
1 Bob 25 
2 Joe 88 
3 Joe 80 
4 Joe 44 
5 Bob 24 
6 Joe 45 

In [35]: unq,count = np.unique(df.Col1,return_counts=True) 

In [36]: unq[count>3] # n = 3 
Out[36]: array(['Joe'], dtype=object)