簡體   English   中英

Pandas groupby value_count 按頻率過濾

[英]Pandas groupby value_count filter by frequency

我想過濾掉小於 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 返回了一個系列

您可以只存儲.value_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_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM