Pandas groupby value_count按频率过滤

时间:2018-05-01 13:08:49

标签: 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
     yes    1
foo  yes    3
     no     2
Name: B, dtype: int64

理想情况下,我希望数据框中的结果显示如下(不排除频率为1)

A    B      freq
bar  no     4
foo  yes    3
foo  no     2

我试过了

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

但是这很失败,因为显然groupby会返回一个系列

2 个答案:

答案 0 :(得分:2)

您只需存储value_counts输出,然后只需对其进行过滤:

In[3]:
counts = df.groupby('A')['B'].value_counts()
counts[counts>=2]

Out[3]: 
A    B  
bar  no     4
foo  yes    3
     no     2
Name: B, dtype: int64

如果您想获得所需的输出,可以拨打reset_index并重命名新列:

In[21]:
counts[counts>=2].reset_index(name='count')

Out[21]: 
     A    B  count
0  bar   no      4
1  foo  yes      3
2  foo   no      2

答案 1 :(得分:0)

这可能会导致.loc

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