我想过滤掉小于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会返回一个系列
答案 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