pandas过滤如果名称出现在列中超过n次

时间:2016-07-10 15:41:09

标签: python python-3.x pandas

这是我的数据框

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()

然而,这是丑陋的代码

是否有更简洁的清洁方式?

2 个答案:

答案 0 :(得分:3)

使用value_countsisin

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

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

enter image description here

答案 1 :(得分: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)