Python PANDS groupby value\按频率计数过滤器

Python PANDS groupby value\按频率计数过滤器,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我想过滤掉小于n的频率,在我的例子中,n是2 df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'bar',],'B' : ['yes', 'no', 'yes', 'no', 'no', 'yes','yes', 'no', 'no', 'no']}) df.groupby('A')['B'].value_counts() A B bar no 4

我想过滤掉小于n的频率,在我的例子中,n是2

df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'bar',],'B' : ['yes', 'no', 'yes', 'no', 'no', 'yes','yes', 'no', 'no', 'no']})
df.groupby('A')['B'].value_counts()

A    B  
bar  no     4
     yes    1
foo  yes    3
     no     2
Name: B, dtype: int64
理想情况下,我希望在数据框中显示以下结果(不排除频率为1)

我试过了

df.groupby('A')['B'].filter(lambda x: len(x) > 1)

但这显然是失败的,因为groupby返回一个序列号,您可以只存储
.value\u counts()
方法输出,然后过滤它:

>>> counts = df.groupby('A')['B'].value_counts()
>>> counts[counts >= 2]
A    B  
bar  no     4
foo  yes    3
     no     2
Name: B, dtype: int64
如果要获得所需的输出,可以调用
.reset\u index()
方法并重命名新列:

>>> counts[counts >= 2].reset_index(name='count') 
     A    B  count
0  bar   no      4
1  foo  yes      3
2  foo   no      2

.loc

>>> df.groupby('A')['B'].value_counts().loc[lambda x: x > 1].reset_index(name='count')
     A    B  count
0  bar   no      4
1  foo  yes      3
2  foo   no      2
>>> df.groupby('A')['B'].value_counts().loc[lambda x: x > 1].reset_index(name='count')
     A    B  count
0  bar   no      4
1  foo  yes      3
2  foo   no      2